MAMEinfo and MAMEUI-inifiles
----------------------------


MAMEINFO.DAT

* Updated to MAME 0.290GIT - http://git.redump.net/mame/log/

* Added Source/Listinfo changes

* Newest Bugs (2nd Oct)

* Fixed DEVICE entries

* Added/Reorganized 'Recommended Games'

* Fixed 'Recommended Games' descriptions.

* Fixed Mameinfo.dat infos




0.290GIT

- New games: After the War, Cocomania (CC, Magnet System), Crime Patrol (USA, 3DO hardware), Dodge Ball (CE, Magnet System), Double Dragon (EC, Magnet System), Flying Shark (4.0, Magnet System), Imohori Penta, Quest for Fame (Japan, QF2/VER.A), Super Contra (SB 'slow', Magnet System) and World Wars (ED, Magnet System)
- New Working games: 4 in 1 MAME bootleg (PLZ-V001), 4 in 1 MAME bootleg (ver 3.00, PLZ-V014), 48 in 1 MAME bootleg (ver 3.09, HPH-V000, alt flash), 60 in 1 MAME bootleg (ver 3.00, ICD-V000), Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 2), Beauty Block, 'Centipede / Millipede / Missile Command (rev 1.03)', 'Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62)', Columns '97 (JET 961209 V1.000), Danchi de Hanafuda (J 990607 V1.400), Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200), Dracula's Castle (Magnet System), F-1 Super Battle, Grand Striker: Human Cup (Americas), Grand Striker: Human Cup (Europe, Oceania), Grand Striker: Human Cup (Japan), High Seas Havoc, IQ Pipe, Loto-Play (MC68705, set 1, with roulette), Loto-Play (MC68705, set 2, with roulette), Loto-Play (MC68705, set 3, with roulette), Loto-Play (PIC16C54, with roulette), Mad Dog II: The Lost Gold (USA, 3DO hardware), Marine Date, Orbatak (USA, prototype), Racin' Force (ver EAC), Racin' Force (ver UAB), Shootout at Old Tucson (3DO hardware), Stop, Wink (newer), Wink (older) and Wink (older, bugfixed).
- New games booting/playable: baoqingt, cafebrk, cafedoll, cafedollg, cafepara, crospuzl, dyna_dc4000.cpp, gegemdb, kd2001, maldaiza, opengolf, ougonhai, psattack, ringball, slotouji, tongzi and v0bowl
- New Non-Working games: Aroma Club (J 970611 V1.000), Burning Striker, Capriccio Star RS, Club San Marino (V1.10 Italy, low resolution), El Tesoro del Faraon (V1.1, Catalonia), Euro Draw (V1.10, low resolution), 'From TV Animation One Piece - Nakama o Tasukero! Dr. Chopper', The Game Machine (V1.21, medium resolution), 'GeGeGe no Kitarou - Taose! Seiyou Youkai Gundan', Haowan Dou Dizhu, Hello Kitty Flower Bingo, Huangjin Da Manguan (China, V739C), Jolly Poker II (V1.20 Kaernten, low resolution), Liberty Card (v1.02), Long Hu Zhengba III Jiaqiang Ban (V200C5N), Lucky Fun (V2.20 Schweiz, high resolution), Mahjong Emperor (Japan, ver. 1.01), Mahjong Waratte Ii Tomo (Japan, ver. 1.00), Miracle Stadium, New Treasure City (Italy, Ver. 1.6), Premier Eleven (prototype), Print Club 2 Banpresto Bono Bono (J 970925 V1.000), Print Club 2 Banpresto Ultraman (J 970604 V1.000), Print Club 2 Evangelion (J 970319 V1.000), Print Club 2 Lamb Chop and Friends (J 990520 V1.000), Print Club 2 Mr. Bean (J 980325 V1.000), Print Club 2 Tsubuyaki Shiro (J 970708 V1.100), Print Club Nightmare Before Christmas (J 980717 V1.000), Print Club Sony Creative Ver.5 (J 980721 V1.000), Print Club Sony Creative Ver.6 (J 971006 V1.000), Shenji Miaosuan (Mainland version 2.0), Showa Retro Print Club 2 (J 980217 V1.000), Slot Battler (J 020703 V1.000), Sugo Rock Spirit, Super Bonus King, Super Magic Flight (Japan, v1.0), Taishan Wuxian (V309CN), Triple Draw (V1.09, high resolution), Tropical Fruits (Eagle, v11.01), 'unknown 960606-5 based machine (set 2)', 'unknown Hai Wei Technology game'. X-Men vs. Street Fighter (bootleg of Mega Drive version) and 'Xingyun 168'.
- New clones: Aka Mahjong (Double Bet, ver 1 19), Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 3), Big 10 (1986, System Make, set 2), Booby Kids (4.1, Magnet System), Chaoji Da Manguan II (China, V641C), Checkmate (set 2), Club San Marino (V0.20 Italy, low resolution), Double Dragon (DD TEST 15/6/88, Magnet System), Dynasty (1992, V1.2), El Estivador (Spanish bootleg of Port Man on Galaxian hardware, set 2), Exzisus (EX 2.0, Magnet System), Ichi Ban Jyan (Ver 3.31), The Game Machine (V0.10, medium resolution), The Game Machine (V1.02 Kaernten, medium resolution), Janyou Part I (Double Bet, set 2), Jolly Poker II (V1.16 Kaernten, low resolution), Karnov (World, rev 5), 'Koi Koi Shimasho - Super Real Hanafuda (E51-00001-A PCB)', Loto-Play (MC68705, set 4, with seven-segment display), Lucky Lady (ASD), Mahjong Chuuka Ken (China?), Mahjong Gal no Kaika (Japan, prototype), Pac-Man (VCC hack), Paradise Deluxe (set 2), Police Trainer (Rev 1.2), Royal Poker (V1.52, low resolution), Royal Poker (V1.54, low resolution), Royal Poker (V1.70, high resolution), Royal Poker (V1.70, low resolution), Royal Poker (V2.00, low resolution), Royal Poker (V2.10, low resolution), Silk Worm (World, conversion), Skat TV (S1), Solar Fox (cabaret), Solitaire (version 2.5, set 2), Super Contra (CC, Magnet System), Super Contra (CE, Magnet System), Sweet Gal (Japan 850410 SG 0-01), Triple Draw (V1.06, low resolution), 'unknown 'Space Invaders' gambling game (encrypted, set 3)', VS Computer Mahjong (hack) and Wink (older)
- New AGEMAME games: 18+, 493, Action 4U SL, Action Total (S7), Arcon, Atlantis (S6), Baba Jaga (S17), Baron CC (S5), Beach Club (S4), Bel Ami (S3), Big Risc (S5), Big Risc (S6), Block Buster, Boss, Bully (S11), Caipi (S7), Carat (S5), Colosseum (S3), Daxx (S4), Daxx (S8), Diamant Krone (P2), Diamant Krone (S5), Duo, Eleven (S3), Endspiel (S9), Fire Game (S3), Foxx (S5), Freegames (S11), Giga CC (S5), Gloria SL (S4), Gloria SL (S5), Gloria Super, Graffiti, Graffity, Hard Rock, HERO, Herold (P5), Hexen Tanz, Hot Slot (S5), Jet Set (S5), Jumpin Jack SL, King Classic SL (S2), King Classic SL (S3), King Play (P5), King Royal (P1), Lanzelot (S5), Limbo (S3), Lord CD (P5), Lord CD (S2), Lord CD (S5), Luxx Pro, M 200 (S5), Mach Mehr, Monarch (P1), Monarch (P5), Monarch (S6), Monopoly, Neon (S12), Neon (S13), Oxigen (S7), Phantom (S7), Piratengold (S4), Piratengold (S5), Play Time (S11), Quick Risc (S4), Rex Super (P5), Rex, Round Runner (P1), Roxy Classic, Roy CC (S4), Scooter (S2), Sky (S6), Speed Run (S3), Speed Run (S4), Sunfair XL (S2), Sunfire (S5), Super Jump (E6), Super Mac (S5), Tex Mex, That's Cool, Titan Pro, Total Genial (S11), Tropical (S3), Twister II (S3), Victoria, Windsor (S2), Winplay SL and X-Cross
- New PinMAME games: Super Star (Recreativos Franco, set 3) and Super Star (Recreativos Franco, set 4)
- New drivers: blzntrnd.cpp, bosco.cpp, caprstar.cpp, cobracom.cpp, digdug.cpp, eagle_9715a.cpp, eagle_9619b.cpp, eoforce.cpp, eurotec.cpp, ghostb.cpp, hkfbingo.cpp, lastmisn.cpp, lotoplay_prog.cpp, oscar.cpp, royalpkr.cpp, sbking.cpp, srdarwin.cpp, technik2000.cpp and xevious.cpp
- New devices: 136094_0004a, adsp2181ekl, alps_dpg23, amd_29f032, amiga_a4091, amiga_adscsi2000, amiga_adscsi2080, amiga_cybervision64, amiga_dkb3128, arm1, arm2, arm250, arm3, arm60, arm610, arm610_be, arm710a_be, at_ssrt, atmega1284, atmega32u4, c3022, c4022, c6400, c8023p, c8028, c1350, c1541rp, c1541tt, c1571dd3, cdi_dvc_slot, cdi_dvc_vmpeg, cdi220_lcd, cdipcb, cga_chameleon, cga_pcxport, citizen_120d, de101, de156, dps1101, gsc38gg307, h8322, h8323, h8324, h8325, h83256, h83257, i2c_ds1307, isa_mc0109a, jalfpu, m146805f2, mach64vt, macronix_29lv320etti, mb8881, mbm29lv160b, mc68340dma, mcd251, mcs801, mcs810, mcs820, mos8521, mps1000p, mps1224, mps1270a, mps2020, mps801, mps803, ncr53c710, pkscram.cpp, quadencoder, quadmouse, ram_slot, sa110, sa110_be, saturn_dcc, saturn_vdp2, sd2iec, seibucop_v1, sh7014adc, sh7014wdt, sti3400, tmek_xga, tms320av110, tmp95c061_serial, vcs_cdgames, vcs_gunstick, vcs_inkwell184c, vcs_lightpen_left, vcs_lightpen_right, vcs_lightpen_up, vcs_magnum, vcs_stacklr, vic1525, unihammer, w65816, wd1010, wd1015, wd1015pl5402, zorro3 and zorro3_slot
- New DATs: GameInit.dat (https://www.progettosnaps.net/gameinit/)
- CPU
  . Analog Devices ADSP21062 'Sharc': Simplify execution of rotate instructions (no need to switch on sign). Added macro to force unsigned register readout. Fixed off-by-one errors in circular buffer wrapping (sharc\sharcops.hxx).
  . ARM7
    . Bugfixes and updates: Fixed multiple issues with ARMv3 parts that dynamically switch between 26 and 32 bit modes. Added ARM610 model for RISC PC 600. Allow ARM926 to execute code from the instruction TCM. Debugging assisted by Claude Opus 5. Added DEC SA110 variant with correct flags, (MESS) sarpc_j233 boots (arm7\arm7.cpp). Simplify handling of unaligned reads (arm7\arm7.cpp).
    . Many fixes: SMLA* instructions were doing the wrong operation. QDADD/QDSUB weren't saturating the operand. Some forms of Thumb BLX were not decoded properly. BKPT was mis-decoded as MSR, which trashed CPSR. Thumb ADC ignored the incoming carry flag. Data aborts ignored the high vector flag. BLX LR in ARM mode did things in the wrong order. MRC with R15 as the destination was supposed to update flags, not the PC. LDR* R15 set the PC to the wrong value. Some undefined opcodes were wrongly executed as LDR/STR. Undefined Thumb instructions weren't generating the UND exception. v5TE DSP ops worked on v4 emulated parts. PLD is v5TE, not v6. LDM*/STM* with an empty register list are NOPs. Disassembler was wrong for SMLA* and SMUL*. ARMv3 was mishandling CP15 writes. Tested on a bunch of drivers including the (MESS) newton.cpp (NewtonOS now boots), the 39in1.cpp gang and more. Audit and debugging assisted by Claude Opus 5 (arm7\arm7.cpp).
    . Align the PC corectly for ARM vs. Thumb mode on return from an IRQ/exception. Fixes (MESS) Nintendo DS booting into the dashboard. Bug tracing assisted by Claude Fable 5 (arm7\arm7ops.cpp).
    . Fixed 26-bit mode regression introduced by the previous NDS fix (arm7\arm7ops.cpp). Completed the recent 26-bit mode work so this core is now the single source for pre-AArch64 ARM implementations. Also fixed LDM with a banked base in the list, necessary for RISC OS 3's FPEmulator (which was broken on the old core too, for a different reason). Fixed LDR/STR R15 handling in 26-bit mode, which tripped up the aa680 boot ROM. Claude Fable 5 assisted with planning, the mechanical refactoring of the drivers, and the generation of a "before and after" test suite (arm7\arm7.cpp).
    . Fixed LDR/STR order of operations and don't nuke the registers when resetting. Makes RISC OS much happier (arm7\arm7.cpp and arm7\arm7ops.cpp). ARM710T is a 32-bit-only part with Thumb, not a 26/32 hybrid. Fixes (MESS) Psion 5 MX PRO (arm7\arm7.cpp). Charged the proper cycle count for shifts where the count comes from a register. Fixes (MESS) tascr30 speed detection (arm7\arm7ops.cpp). Use helper function for disassembling register lists. Refactor shift count disassembly helper (arm7\arm7dasm.cpp).
  . Atmel ATmegaXXXX
    . Added pin-change/external interrupts, real GPIO DDR/PORT semantics and full-duplex SPI shifting. Added PCINT0-2 and INT0/INT1 support: pin_change<Port>() latches PCIFR/EIFR from a possibly mid-instruction external write, and the actual interrupt is taken at the next execute_run() instruction boundary. INT0/INT1 sense mode (low/change/falling/rising) is read from EICRA; PCIFR/EIFR are write-one-to-clear. Added ddr_w<Port>(): each port's DDR is now tracked and drives the gpio_out callback together with PORTxn, so an input-configured pin floats (reads as 1) instead of being pulled by the last PORT write. Rewrite spi_tick() to actually shift MISO into SPDR (previously only MOSI was ever driven): samples MISO on the SCK rising edge, supports DORD, and sets SPIF/raises the SPI interrupt when the byte completes. spdr_w() now clears SPIF and resets the shift state on each write, and disable_spi() actually stops an in-flight transfer. Added sleep mode (m_sleeping) and ATmega1284 device support. Misc: timer0 normal mode now actually counts/overflows instead of logging "unimplemented"; EEARH masking goes through eearh_mask() instead of a fixed EEARH_MASK. Updated comments. Provide devcb-compatible port bit writes. Assisted by Claude Sonnet 5 and GPT-5.6 Sol (avr8\avr8.cpp and avr8\avr8ops.hxx).
    . Various fixes. Added basic ATMega32u4 support. Allow the debugger to break in while executing sleep opcode. Obey SMCR sleep-enable flag when executing sleep opcode. Added basic fast PWM timer support for timer 0. Replaced common_reset() with proper superclass call to fix initialization (avr8\avr8.cpp).
  . Dynamic Re-Compiling
    . Fixed typo'd array indexing in the DRC cache allocator. Fixes Github #16155. For PowerPC 603, this manifested as scribbling on memory 512 KiB after the end of the CPU device class. MIPS and SH were doing the same thing at different wrong offsets. AI explanation: "drc_cache::alloc() and alloc_near() push leftover alignment padding onto the free list, but index the free array with bucket (the requested size's bucket) instead of padbucket (the padding's bucket, the one that was range-checked). For any request over 1 KiB that is a wild 8-byte read and write at bytes - 8 past the 128-entry free array inside the CPU device object". Claude Fable 5.1 assisted with debugging the issue (cpu\drccache.cpp).
    . Set a rounding mode for the SHARC and TGPx4 DRCs. Resolves weird behavior on x64 systems. Debugging assisted by Claude Fable 5.1 (sharc\sharcdrc.cpp). Fixes coprocessor error on bootup in fvipers, fvipersb, schamp and sfight (ID 09394).
    . Fixed failure to set roundiing mode in some cases (cpu\drcbex64.cpp).
  . Fujitsu Micro F2MC-16: Revert MAME 0.289 changes (External interrupts do not seem to have a iack/vector fetch cycle) (f2mc16\f2mc16.cpp). Fixes black screen and freezes MAME at start in Motocross Go! and clones (ID 09509).
  . Hitachi H8
    . Use logmacro for verbose logging (h8\h8_timer16.cpp). Minor logging fixes (h8\h8_dma.cpp and h8\h8_sci.cpp). Fixed logerror bug that caused assertion failures in (MESS) jv880 and rd500 (h8\h8_timer16.cpp). Quiet default logerror (h8\h8_timer8.cpp).
    . The H8-3006/7 bit 7 for port 6 is weird: It's always input while its ddr bit always says output (h8\h83006.cpp and h8\h8_port.cpp).
    . Fixed flags for 8-bit SUBX. Fixed byte-wide forms of 'CMP EA', #imm' and 'MOV #imm, EA'. Added undocumented LDC/STC byte-wide behavior that Roland relies on (h8500\h8500.cpp). ixed word-size LDC/STC EP to save/restore the EP:DP pair, which the (MESS) Alesis QS IRQ handlers definitely assume (h8500\h8500.lst).
    . MOV.W Rn, @-Rn stores the decremented register. The programming manual (section 1.3.5, note 5) shows the stack holding "old SP - 2" after MOV.W SP, @-SP. Regression tested with SC-88 drivers (h8500\h8500.lst).
    . Map the H8/510 watchdog timer registers and port 8 resets to inputs. TCSR/TCNT at FF10-FF11 were inside a disabled block. The SC-88 firmware assumes the ports power up as inputs (h8500\h8510.cpp).
    . Hook up refresh controller for H8/3002 and H8/3003
  . Hitachi SH7xxx/SH-1/2/3/4
    . SH family updates: Removed shadow m_am member that was causing confusion in favor of the base class's. Exception vector fetches now mask the fetched PC with m_am. Fixed DRC cycle counts for MULS, MULU, BT/BF, TSTM, BSRF and STC/LDC. Fixed interpreter cycle counts for JMP, ORI and ORM. Fixed interpreter MAC.W and MAC.L to generate correct results. Illegal instructions now trap when they happen instead of some time later. generate_delay_slot() propagates the delay slot's cycle count back to the caller. Fixed DRC delay slot behavior for BSRF, BRAF, JSR, JMP, RTS and RTE. MOV.W @(disp,PC), MOV.L @(disp,PC) and MOVA now use the correct address when in a delay slot. RTE restores PC and SR before the delay slot executes and properly masks SR. LDC.L @Rm+,SR masks the loaded value with SH_FLAGS. SLEEP now actually sleeps on the DRC, it was a no-op before. The FPU now uses the requested rounding mode for both interpreter and DRC. Correctness fixes for the interpreter versions of FTRC, FDIV, FSQRT, FSRRA, FMAC, FTRV and LDS. Fixed 11 cases of copy-pasted very broken UML_TEST (..., m_fpu_pr, 0). DRC FNEG inverts the sign bit in both precisions. DRC FTRC routed to the range-checked implementation. All seven DRC FMOV forms converted to UML via generate_fmov_single/generate_fmov_pair. DRC FLDS, FTRC, FSQRT, FSRRA, FCNVSD, FCNVDS, FIPR and FTRV converted from cfuncs to UML. DRC CLRS, SETS, SHAD, SHLD, LDCDBR, the banked STC/LDC forms and the @-Rn/@Rn+ control-register transfers and LDS/LDS.L to FPSCR converted to UML. Func_FSSCA applies the rounding mode before calling the interpreter. Tested to fix a selection of Saturn software that was marked "doesn't work on DRC" and to generate byte-identical 3D frames between the interpreter and DRC with 6 Naomi games. On both x64 and arm64 hosts and even x64 vs. arm64. Additionally, a generated Lua script performed an FPU torture test which found and verified many of these issues. Debugging and tracing assistance and some suggestions on fixes were provided by Claude Opus 5. Fixed things that should be in the DRC cache.
    . A few cleanups: Flip the interpreter's policy to run primarily in the host's rounding mode and only set ours when necessary. Moved m_fpmode into the cache for further x64 safety. Added the necessary #pragma for FP environment changes on Clang. As far as I can tell, GCC wants per-file -frounding-math in the build system for this, and ditto drcbec.cpp. That's a relatively big change for two things that won't normally be used though (the SH interpreter and drcbec).
    . Added SH7016/SH7017 mid-speed A/D converter. Fixed the SH7014 SCI's asynchronous frame and bit rate. The frame format had all three of its fields the wrong way round. A port set up for 8N1, as MIDI is, was receiving 7E2 and framing every byte. The internal bit rate was short by the factor between the peripheral clock and the bit clock. Expose the receive input, which had no accessor. The SH7014 SCI loads on a falling TDRE only, and its requests are levels. Fixed SH7014 watchdog timer. The SH7014's DMAC restarted every transfer it finished. The SH7014's IRQ pins have vectors and priorities of their own. sh7014 edge-detected IRQs never reached the CPU (sh\sh7014.cpp). Wait 2 more cycles on DMA start. Fixes Truck Kyosokyoku music regression. Debug assisted by Claude Opus 5.1 (sh\sh7014_dmac.cpp).
    . Implemented standby mode that SLEEP kicks the SH-2 into and fixed a bug with FRT capture. Fixed SH7604 on-chip divider corner cases (sh\sh2.cpp and sh\sh7604.cpp)
  . IBM PowerPC
    . Help performance on PCI PowerMacs with a 68K DRC: * Apple's 68k DRC frequently generates a code sequence, flushes it, and then regenerates the exact same thing at the exact same address. So we now cache small sequences and can restore them without the overhead of a recompile. This required adding some accessors to the 3 DRC backends. * The entire vTLB (a MAME DRC implementation detail, *not* the 603's architectural TLB) was being used as a comparison for deciding to flush a block rather than just the actual mapping. In particular, the access count bits were causing unnecessary recompiles. * The vTLB was also too small: at its original size it covered just 512K of working set. By trial and error stepping through powers of 2, 4096 was found to give the best results running real Mac software. With these changes, pwrmacg3 went from roughly 160,000 block flushes and recompiles per second to 0 when idling at the Mac OS 8.1 Finder. This also smoothed out regular audio breakups on pippin caused by recompile storms and seems to have even sped up a few of the PPC arcade games by a few ticks. Claude Opus 5 assisted with measuring and isolating the performance issues n (powerpc\ppc.h, ppccom.h and ppcdrc.cpp).
    . Generate the no FPU exception when MSR[FP] is cleared, and added a temporary opt-in hack for some cache-reliant (MESS) Mac OS 9 behavior. Fixes garbage window backgrounds in the Finder and elsewhere on PowerMacs. Claude Opus 5 assisted with tracking down these issues (powerpc\ppc.h, ppccom.cpp and ppcdrc.cpp).
    . TLB fixes exposed by (MESS) Mac OS X (powerpc\ppc.h and ppccom.cpp). Respect the ICFI bit in HID0, fixes regressions in Konami M2 games. Finding the bug was assisted by Claude Opus 5 (powerpc\ppccom.cpp).
    . Fold CTR-only branches. Branch folding wasn't implemented for bdnz/bdz instructions. This caused the Power Macintosh 6100 ROM's calibration loop to be off by 1 cycle and miscalculate the CPU clock (powerpc\ppcfe.cpp).
    . Fixed Mac OS X kernel panics freezing the MAME process (powerpc\ppcdrc.cpp). Fixed the polarity of the 603 TLB miss SRR1 store bit. The MPC603e User's Manual contradicts itself in places even in the latest revision on this point, but real-world code agrees with this polarity. Honor cpu_device::retry_access() in the DRC, boot (MESS) pmac6200 from CD (powerpc\ppcdrc.cpp). Invalidate 603 TLB entries when a segment register changes and invalidate 603 TLB mappings by index (powerpc\ppccom.cpp and emu\divtlb.cpp).
    . Retire a fixed entry loaded with no pages (emu\divtlb.cpp). Fixed more long-standing 603 TLB-related bugs. The KEY bit indicating supervisor/user is now actually used. Fixed up vtlb page permissions. Fetches now use the correct mode permissions instead of always supervisor. Debugging assisted by Claude Opus 5 (powerpc\ppc.h, powerpc\ppccom.cpp, powerpc\ppcdrc.cpp and emu\divtlb.cpp).
    . We were mixing up the 603's split instruction and data TLBs. Mac OS and MkLinux don't care, but spikeout does. Debugging and the outline for the fix assisted by Claude Fable 5.1 (powerpc\ppccom.cpp).
  . Intel 8080: Fixed INTE output at reset (i8085\i8085.cpp)
  . Intel 80960KA/KB: i960 fixes: SUBC had the borrow inverted, this affected Speed Racer's 64-bit multtiply/divide subroutines. MOVRE was stomping past the destination register; this trashed m_SAT in Dead or Alive. The priority wasn't being adjusted properly when taking an IRQ. MODI's sign test was overflowing and giving wrong results frequently in Speed Racer. Core audit and disassembbly to determine which games were affected by which bugs assisted by Claude Fable 5.1 (i960\i960.cpp).
  . Intel I386: Fixed rotate (i386\i386op16.hxx). Fixed stmxcsr typo in disassembler (i386\i386dasm.cpp). Correct CPU generation flags for several opcodes (i386\i386ops.h).
  . Intel I386, MIPS and PPC: Retire a fixed entry loaded with no pages (emu\divtlb.cpp)
  . Intel P8798
    . Timers run three times too fast. timer_value() and timer_time_until() are in cycles, not input clocks, so divide down accordingly (mcs96\i8x9x.cpp).
    . MULB indexed byte operand and HSO CAM entries lost to exact-equality matching. mulb with an indexed byte operand must read a byte. Fire HSO CAM entries on reached-or-passed, not exact equality. Co-authored-by Claude Opus 5 (mcs96\i8x9x.cpp).
    . Fixed MULUB indexed three-operand form discarding the multiplicand. The indexed variant (opcode 5F) overwrote the fetched operand instead of multiplying by it, so the result was just the second operand zero-extended. The direct, immediate and indirect variants were already correct. Fixed DIV and DIVU ignoring the high word of the dividend. The 32-bit dividend is held in a doubleword register, but the high word was OR:ed into the low word instead of being shifted into bits 16-31, so any dividend of 64K or more produced a wrong quotient and remainder. Fixed signed DIV remainder, and avoid a host trap on overflow. DIV divides using signed arithmetic, with the high word of the destination receiving (DEST) MOD (SRC). The remainder was computed with the dividend as unsigned, converting a negative divisor to unsigned as well, so any negative operand gave a wrong remainder (DIVB already does this correctly). Also perform the division in 64 bits: 0x80000000 / -1 is undefined behaviour in 32 bits and raises SIGFPE on x86 hosts, where it should just set V (mcs96\mcs96ops.lst).
  . MC68340
    . Implemented DMA transfers and external interrupt handling. Convert the DMA module to a device and implement dual-address transfers, external request handshakes and interrupt arbitration. Support configured external autovectors and restrict MBAR accesses to CPU space (machine\68340.cpp).
    . Don't push out outputs on loading state. This would just mask issues with other devices (machine\68340tmu.cpp).
  . MOS Technology 6502
    . New cycle-interruptable 65816 core (WDC W65C816S) using the existing m6502 generator infrastructure. Switch (MESS) apple2gs.cpp to W65816 and bus\adb and default to the correct LLE A9M0330 keyboard and A9M0331 mouse. Claude Opus 5 assisted with conformance testing and a final refactor and cleanup pass (m6502\m6502d.cpp and m6502\m6502make.py). Include w65816 as an option (tools\unidasm.cpp). Added optional AS_DATA for w65816 so it has the same flexibility g65816 had (m6502\w65816.cpp).
    . Implemented RDY input (m6502\m6502.cpp). Assisted by Claude Opus 5.
    . Fixed interrupt sampling on the NMOS variants. Latch interrupts before each bus cycle, except the opcode fetch that follows. This makes the effective sample point the instructions second-to-last cycle. Do not sample interrupts on the second cycle of a taken same-page branch, during BRK/interrupt vector fetches, or directly at the vector pull when an NMI takes over a BRK. For that NMI case, latch it before the status push instead. Assisted by Claude Opus 5 and GPT-6 Astra (m6502\m6502.cpp).
  . Motorola MC68000
    . Updates: Fixed stale prefetch carrying over across user/supervisor switches. Fixed PFLUSH not correctly consuming its operands. Some preliminary work on Coldfire exception stack frames. Issues reported by Plamen (m68000\m68k_in.lst, m68kcpu.cpp/h, m68kmmu.h and m68kops.cpp/h).
    . Fixed a pervasive offset miscalculation in the bitfield instructions plus a bonus operation size goof in bfffo. Claude Opus 5.5 assisted with verification of the issues and generated a test suite which logged 1100+ failures prior to this fix and zero now (m68000\m68k_in.lst and m68kops.cpp).
  . Motorola MC68030: Fixed CACR mask for '030, was causing a few Macs to misdetect as an '040 (m68000\m68k_in.lst and m68000\m68kops.cpp)
  . Motorola MC68040
    . On the MC68040 CACR reserved bits must read as 0 (m68000\m68k_in.lst, m68kcpu.h and m68kops.cpp), fixes Amiga CPU detection (GitHub #15792).
    . Preliminary support for FPU exceptions (primarily for FDIV and friends). Fixes the train not moving in Densha de GO! attract. Issue was traced to an uninitialized variable in the actual game (causing a divide by zero and then NaN poisoning) by GPT-6 Astra (m68000/m68k_in.lst, m68kcpu.cpp, m68kfpu.cpp). Consistent source code style (m68000\m68k_in.lst).
  . Motorola MC68HC11xx: Wake from STOP on masked XIRQ (mc68hc11\mc68hc11.cpp)
  . Motorola MC68HC705xxx
    . Added SCCR1 and BAUD register stubs. Added remaining SPI and SCI registers. The mc68hc05c8a datasheet notices that these two are short by 4 bytes. This corrects the error (m6805\m68hc05.cpp).
    . Added SPI and SCI IRQs. Consulted the mc68hc05c8a and MC68HC05C4 documents. Label SPI and SCI vector with part family. Makes the vectors specific to the C family of these parts. Updated Vector Naming. Timer is 4x too slow. 1<<4 == 16. It should be 1<<2 == 4 to get a fixed prescaler of 4 (m6805\m68hc05.cpp).
  . MCS-48: Added Fujitsu MB8881 variant of Intel 8039. Added one character to flags string specifier (from 11 to 12), stack bit 0 was not shown. Enable undocumented opcode 0x76 (JNC) for i8021 (mcs48\mcs48.cpp).
  . NCR 53C7xx SCSI
    . Initial support for the NCR53C710. Split the generic ncr53c7xx_device into ncr53c700_device and ncr53c710_device. Changed register defines into constants. Convert the UNIMPLEMENTED define into a function. Correct DCNTL bit definitions and implemented manual-start. Correct SCSI selection to present both initiator and target IDs. Added target BSY waiting. Correct SFBR to latch the first byte of each Block Move. Added masked SFBR comparisons for Transfer Control instructions. Correct Block Move opcode widths and rejected reserved initiator opcode 0. Implemented 53C710 specific software reset and SIGP handling. Support big-endian mode on the 53C710. Added 53C710 table-indirect Block Move and selection operands. Added 53C710 register/SFBR read-modify-write SCRIPTS instructions. Added 53C710 memory-to-memory moves. Added relative Transfer Control addresses. Implemented SIGP wakeup from Wait Reselect. Improved logging. Added SCRIPTS disassembly for the newly supported 53C710 instructions. Added working SCSI support to the Amiga 4000T driver. The system successfully boots now instead of hanging while checking for SCSI. GPT-5.6-SOL was used as a research and debugging tool (machine\53c7xx.cpp).
    . Fixed some issues shown by the ReAmiga diagnostic test: Don't fatalerror when the DMA watchdog is set. Honor memmask on writes to the TEMP register. Implemented CTEST5 ADCK and BBCK manual DMA address/count clocks. Implemented ISTAT software resets. Gate external interrupt by SIEN and DIEN. All tests now pass except for the FIFO and low level tests. GPT-5.6-SOL was used as a research and debugging tool (machine\53c7xx.cpp).
  . NEC Vxx: Added a register map for the NEC V20/V30/V33 family (debugger\debuggdbstub.cpp). Made GENPC importable on the V20/V30/V33 and V25/V35 cores (nec\nec.cpp).
  . NEC V25: Fixes and updates. The timer control registers can now be read back properly. DMA requests can be triggered from both the DMARQ pins and the TC pins. Implemented async mode in the serial interface. Only the first interrupt of a group carries its priority. nstruction cycle counts from manual. Fixed REP resume after interrupt. Give the V25 its own specific cycle counts, MAME previously reused the V20's which are slower. Bank-switched interrupts save and restore the REP context. Assisted by Claude Opus 5 (nec\v25.cpp). Fixes audio CPU crashes if some sound effects are triggered during player death in clone V-Five (Japan) (ID 09546).
  . NEC V60: Incorrectly printed opcodes DBLT/DBLE/DBV/DBNV in disassembly. Latent issue with incorrect opsize usage in disassembly. Stale m_amflag caused segfault (v60\am2.hxx, v60\op12.hxx and v60\v60d.cpp).
  . NEC VR5500: NEC VR5500 has unique page mask and Config encodings vs. stock MIPS III. Fixing this allows jnero to write a correct display list instead of garbage (mips\mips3.cpp and mips3com.cpp).
  . Philips SCC68070
    . Fixed UART Status. This change fixes several issues in the UART for this device. This has the effect of resolving some errors in the CD-i bios tests. Previously, UART would flag as Ready on every callback. Now it won't identify as ready while a transmission is currently queued. It would also preserve the Break flag on reset. This change correctly resets the Break flag. Finally, this unsets Ready when transmitting a write (machine\scc68070.cpp).
    . Fixed I2C Mismatch. The bits in line 612 don't match line 492 where I2C level is reset. It seems to be accidentally copying the m_uart_rx_int value instead (machine\scc68070.cpp).
  . Sony CXD8530xx/CXD86xxx (PSX CPU): Moved ram_device into drivers, support all ram window sizes and mirror 0x1fc801xxx registers at 0x9fc801xxx & 0xbfc801xxx (psx\psx.cpp).
  . ST0016: Primary implement tilemap scroll. Use tilemap_t for tilemap. Added notes about tilemap scroll register and tilemap registers. Fixed code style (seta\st0016.cpp).
  . Toshiba TMP90xxx/TMP91640: Fixed CPIR infinitely looping. Combined LDI/LDD and added CPD (tlcs90\tlcs90.cpp).
  . Toshiba TMP95C061: Fixes and updates. Route P6 data writes to port 6. Dispatch INT6 and INT7. Correct the 8-bit timer prescaler taps. Implemented the INTNEST control register. Do not dispatch a vector micro-DMA owns. Give the serial channels a bit-serial path. Restore the 8-bit timer prescaler taps. The taps were moved four bits lower in 6756074d97, which made every 8-bit timer sixteen times faster and garbled ngp/ngpc music. This puts them back, so tlcs900_handle_timers behaves exactly as it did before that change and matches tmp95c063 again. Assisted by Claude Opus 5 (tlcs900\tmp95c061.cpp).
  . Votrax SC-01/-A: Fixed a sign error that can make the SC-01 F2 noise-injection filter unstable for valid internal ROM states (sound\votrax.cpp). Fixes sound cuts off in Q*bert and Q*bert's Qubes after a while and doesn't come back (except for the knocker) (ID 09521).
  . Zilog Z8001/2: Correct CPU/MMU behavior. Fixed addr_to_reg segment mask to replace full high byte. Fixed MULTW carry-flag boundary. Preserve DIVW/DIVL quotient on representable overflow. Toggle H flag in COMFLG. Write POPL @Rd,@Rs result to memory. Read indirect MULTL operand from memory. Fixed dynamic shift dispatch and count sign-extension. Fixed RRDB temp register and RLDB/RRDB S flag. Accumulate V flag across shift/rotate steps. Fixed compare-string repeat and block-move Z flag. Fixed SOTIRB/SOUTIB source not incrementing (bumped segment word instead of offset). Fixed block-I/O instruction flags and address increment. Fixed COMB @Rd destination register decode. Trap the 4F extended EPU family at the correct instruction. Preserve the indexed LDA operand across an overlapping destination. Derive the DAB correction table from measured Z8001 behaviour. Leave the tcc destination alone when the condition is false. Fixed the MULTL carry boundary. Take the DIV overflow sign flag from the whole quotient. Order the translate RH1 writeback against the pointer step. Replaced the whole high word when writing a segmented address back. Do not mask PSAPSEG through LDCTL. Read a byte for the non-indexed COMB. Do not mask the FCW written through LDCTL. Calculate DAB correction directly (z8000\z8000.cpp).
  . Zilog Z80180/Z8S180/Z80182 and Hitachi HD64180RP: Fixed some bugs found when bringing up the (MESS) Apple II RamFAST SCSI card. When starting a timer, use its reload value, not zero. Fixed DMA completion IRQs being silently dropped when IFF is clear. Check the right bit for the DMA1 interrupt's edge vs level trigger setting. Internal IRQs could be taken while another interrupt was in flight and completely hose the machine state. External IRQs were already properly gated. Debugging was assisted by Claude Opus 5 (z180\z180.cpp).
- SOUND
  . CD/DA: Play CD audio through sound\cdda and added CD Player Control menu (ui\cdctrl.cpp). Assisted by Claude Opus 5.5.
  . Creative Labs CT1745 SB16 Mixer: Make irq/dma select to be user defined (sound\ct1745.cpp)
  . GI SP0256 Narrator Speech Processor: Adjust divider to achieve 10kHz sample rate
  . ICS2115 WaveFront Synthesizer: Improved register 0x10 implementation. Minor revert volume envelope behaviour (previous improvement retains to comment). Fixed namings. Reference: https://github.com/MiSTer-devel/Arcade-IGSPGM_MiSTer (sound\ics2115.cpp).
  . Konami 053260 KDSC: Fixed pan LUT value based on RE'd schematics and trace (https://github.com/furrtek/SiliconRE/tree/master/Konami/053260). Use GPT-6 Astra for analysis (sound\k053260.cpp).
  . MagicEyes VRender0 SoC
    . Set screen to avoid fatal error when a terminal is active and added setter for external UART clock (machine\vrender0.cpp).
    . Use an enum for interrupt sources. Implemented light pen registers for P's Attack lightguns. Timerize DMA operation, acknowledge horizontal sync bit in CRTMOD register (machine\vrender0.cpp).
    . Implemented external UART clock and worked around problem with buffer space polling. Claude Opus 5 implementation (machine\vr0uart.cpp).
  . PlayStation SPU: Use ram_device. Support 512k/1mb/2m/4m SPU RAM (sample code at https://github.com/smf-/nolibgs_hello_worlds_spuram. Fixed register/DMA endian issues. Implemented master volume, voice1&3 decoded data writing and write CD decoded data even if no CD/XA playing. Use a timer to trigger SPU IRQ at the correct time. Implemented first/second half decoded data flag in status register. Extend SPU register space to support channel volume reading. Fixed chon register reading and FM chaining. Removed unused non interpolating code as the SPU always interpolates. Update SPU repeat address register when hitting a loop start (sound generation needs an overhaul to make this work properly). Fixes Judge Dredd audio delay in cutscenes (ID 08914). Fixed PlayStation CD-ROM XA audio playback regression (sound\spu.cpp).
  . RCA CDP1869 VIS
    . Fixed tone and white noise output. Fixes sound in (MESS) tmc600, comx35, pecom64 and the Cidelsa arcade machines (altair and destryer). Implemented by Claude Opus 5 and based on recordings from a real TMC600. Validated that the sound output matches the recordings nigh 100% (sound\cdp1869.cpp).
    . Improved video accuracy. Proper tone-on-tone palette. Partial updates on OUT 3. Wrap the refresh address counter at the maximum page memory size. Ignore CPU accesses to page and character memory during display time. Assisted by Claude Opus 5 and validated side-by-side with a real TMC600 (sound\cdp1869.cpp).
  . Sega PCM/Sega 315-5218 PCM: Fixed end address off-by-1 regression (sound\segapcm.cpp). Fixes broken engine sounds in Enduro Racer (ID 09512) and skidding sound in Out Run (ID 09548).
  . Seta ST0016 (Audio): Improved sound emulation. Linear interpolation between samples: Hardware shows none of the images a nearest-sample fetch produces (mayjinsn/mayjisn2 samples play at 5.6-16 kHz on the 62.5 kHz output). Non-linear (mu-law like, 3-bit exponent / 4-bit mantissa float) sample format, enabled by voice 7 register $1f bit 1: set by renju, srmp5, gostop, koikois, nratechu, dcrown; clear in mayjinsn, mayjisn2, speglsht, macs, jclub2. Matches the byte statistics of the sample banks and renju PCB footage. Exponential volume law (~6 dB per 8 steps, 0 = mute) instead of linear; fitted to mayjisn2/renju PCB footage. Assisted by Claude Fable 5 (sound\st0016.cpp).
  . Sound Interface
    . Open device at emu rate to avoid resampler drift and compare queue bytes against bytes in backpressure check (assisted by GLM-5.1; sound\sdl3_sound.cpp).
    . Many CoreAudio fixes and improvements: Fixed missing comma after "Left Top Middle" in sMacChannelLabels, causing descriptions to desync. Fixed unbounded lookup in unknown-label fallback. Fixed some channels getting two descriptions. Fixed channel bitmap translation for channels > 31. Fixed -verbose logging for channels using the bitmap lookup. Fixed m_nodes desync caused by skipped devices. Guard against null device_uid/device_name. Source render callback now verifies against the buffer size. Fixed issue where source buffer could be smaller than a devices minimum buffer. Sink and source channels are now accounted for separately. node.m_sinks / m_sources were double-counted in some configurations. Source streams were opened with the stream count instead of the channel count. m_channels was never set for source streams. Node scope and rate range now chosen from is_sink rather than in_streams > 0. Sample-rate property address was missing PROPERTY_ELEMENT_MASTER. Error numbers were being discarded instead of reported in some cases. Input callback was moved from kAudioUnitScope_Output to Global. Packet size is now clamped to BufferFrameSizeRange. m_max_frames is now derived from MaximumFramesPerSlice and BufferFrameSizeRange. Input-path error message said "output device". m_need_generation_bump is now atomic for thread safety. AudioUnitRender failures no longer osd_printf_error from the realtime I/O thread. m_stream_id starts at 1; open failures return 0 rather than -1. Top Rear Center X and LFE 3 channels are now properly reported to the core. static_assert added to validate the channel lookup table. set/clear_property_listener take AudioObjectPropertySelector, not AudioObjectPropertyElement. Added selector_name() for improved FourCC logging. Device-gone errors on listener removal are verbose, not errors (e.g. closing the lid on a MacBook). Stream-config buffer list uses unique_ptr instead of malloc/free. m_input_buffer.set_latency() moved from the sink path to the source path. Claude Opus 4.8 and 5 assisted with research and debugging for some of these issues (sound\coreaudio_sound.cpp).
  . Yamaha SWP30 sound chip
    . Two register field width fixes in the streaming block. IIR2's a1 and b1 registers were swapped and the DPCM accumulator leaked in compressor modes 0-2.
    . Fixed three meg drc mismatches with the interpreter. Make the revram enable register readable.
    . Meg memory reads with bit 0x23 use an absolute address. Interpolate backwards samples in playback order.
    . Fixed a non-const static array and implemented swappable idiom properly. Fixed meg alu corner cases found on distortion-type effects. DPCM keeps the multiplier remainder and the next delta comes from what was added.
    . A reverb ram bank turned off in the tlb enable drops writes and reads as zero. Generate the memory accesses for the banks that are on, rather than testing the enable bit at run time.
  . Yamaha YMF271 OPX
    . Rewrote the YMF271 (OPX) core. Replaces the MAME-derived core with a new one. The model follows recordings of real hardware (no chip was available for direct probing): FM: OPM-style operators (logsin/exp tables, envelope generator at fs/2 with rate key scaling, detune, per-slot LFO with AM/PM), all 16 4-op algorithms, the 2x2-op and 3-op+PCM sync modes, feedback and the non-sine waveforms. PCM: 8-bit and packed 12-bit samples, linear interpolation, Fs divider and loop/end handling with End flags per slot group. AccOn (saturating accumulation) and Ext En/Ext Out: The extended channels CH4-CH7 (EXT1/EXT2 pins) are exposed as stream outputs 4-7. Status register 0 exposes the End flags of slots 12/24/36 as documented; End flags are cleared when the status register is read (required by the Brave Blade sound driver's voice allocator). Timers, external memory access and the device interface are unchanged. Assisted by Claude Fable 5 (sound\ymf271.cpp).
    . Wave 6 passes the modulation input through as a 9-bit ramp. The linear waveform's modulation input (scaled by MUL, 0 = 1/2) wraps at 9 bits and is stretched by 64 on top of the half-scale DC level, so a modulated wave-6 carrier swings up to 2.5x the range of the other waveforms. Fixes the level of the hi-hat and of the hard-panned synth in the Raiden Fighters ROM update BGM. Fixes Viper Phase 1 title screen SFX and item collection SFX are incorrect (ID 04533) (sound\ymf271.cpp).
  . Yamaha YMF292-F SCSP: Implemented main to sound CPU interrupt. Use direct DIPAN/DISDL if no EFSDL available for EXTS input source. Fixed saturn Multiplayer Audio CD silent playback regression (sound\scsp.cpp).
  . Yamaha YMW-258-F: Effect DSP interface, don't clamp voice register numbers. Voice register numbers above 7 were clamped to 7. The TG100 writes FF to register 9 at every key on, which set the amplitude LFO of every voice to maximum depth. Writes to unknown registers are now ignored. Added the YMW258-F's interface to an external effect DSP (YM3413 in the TG100). Determined that voice registers 7-10 are envelope rates and AM depth (sound\multipcm.cpp). Exponential attack curve. The attack closes a fixed fraction of the remaining attenuation per sample instead of ramping linearly in dB, and starts at attenuation 0x2a0 of 0x3ff (-63 dB). The YMF278B manual's attack times are 67 steps (0-100%) and 40 steps (10-90%) of att -= (att >> 4) + 1 starting at 0x2a0. The fixed-point update stays within 3% of the attack time of that curve (sound\gew.cpp).
- DEVICE
  . 3dfx Voodoo Graphics: Fixed multibase texture LOD addresses. With TMULTIBASEADDR set, LOD 1, LOD 2 and LODs 3-8 take their base from their own register, but the hardware still adds the LOD's offset within the mipmap chain. Co-Authored by Claude Opus 5.5 (video\voodoo_render.cpp).
  . ATA/ATAPI
    . Set removable media bit, don't report GOOD to UNIT_READY if no disc is inserted, and reject DVD-ROM commands if we're a CD-ROM (ata\atapicdr.cpp).
    . Don't double-IRQ IDENTIFY PACKET DEVICE (ata\atapihle.cpp). Handle DEVICE_RESET (machine\atahle.cpp).
    . ATA: Removed mem_mask from ata bus handlers to match hardware. Added default_data() to abstract_ata_interface_device for specifying the default bus state when no devices are driving the bus. Converted ata_hle_device_base base class to a mixin called device_ata_hle_interface. Converted ata_mass_storage_device_base class to a mixin called device_ata_mass_storage_device_interface. Support LBA48. Support IDE_COMMAND_IDLE_IMMEDIATE. Removed IDE_COMMAND_DEVICE_RESET as it's only valid for ATAPI devices (bus\ata\*).
    . ATAPI: Support IDE_COMMAND_RECALIBRATE & IDE_COMMAND_IDLE_IMMEDIATE (ata\atapi*). ATAFLASH: Removed hack for supporting 8 bit compact flash cards. Added default values for CISTPL_MANFID & CISTPL_VERS_1 (pccard\ataflash.cpp). LOG: automatically dispatch to logerror() or device().logerror().
  . Atari AVG/DVG: Correct vector intensity scaling (see GitHub #15835) (video\avgdvg.cpp)
  . Atari RLE Motion Objects: Align sprite pen base to the sprite's color depth. Fixes the yellow blood in Primal Rage (atari\atarirle.cpp).
  . CD-ROM: Support CD+G Discs. Without this change, CD+G discs when played in the CD-i audio player will sound like "crackling". With this change, CD+G discs will play correctly (util\cdrom.cpp).
  . CD40105B FIFO Register: Load each SI pulse into the FIFO only once. A rising SI edge that arrives while the FIFO is full is now held until space frees up. After that word is loaded, holding SI high no longer loads it again on the next shift out. Assisted by Claude Opus 5.5 (machine\40105.cpp)
  . CGA (ISA8 CGA - 4enlinea, ISA8_CGA_TETRISKR and Yamaha V6363 CMDC (on-board CGA ISA8))
    . M24 mode2 bit 0 enables the 400 line mode, it does not select graphics. Text versus graphics is still selected by bit 1 of the CGA mode control register, so software that leaves mode2 bit 0 set while in text mode had its text page fed to the 1bpp renderer and nothing was displayed. Moved (MESS) chameleon CGA into cga.cpp and correct the charram as it supports 16 rows. Initial chameleon palette support (isa\cga.cpp).
    . Made a subdevice to handle the PCT's slightly non-standard CGA, and to draw properly when it's not the only monitor in MAME (isa\cga.cpp).
  . Clock: Removed timing checks in callback function (machine\clock.cpp)
  . CXD85xxx/CXD86xxx GPU (PSX GPU): Use ram_device. Added support for setting the PAL & NTSC CRTC clock & set the device clock to half the system clock (video\psx.cpp).
  . Dallas DS1202 Timekeeping: Initialized NVRAM from an optional default data region in nvram_default (machine\ds1302.cpp)
  . DECO 55 / 56 / 74 / 141 Tilemap Generator: Fixed attempt to set zero scroll rows. If only one scroll row configured, don't right-shift it. Caused an assertion failure in debug builds (dataeast\deco16ic.cpp).
  . EFO Sound-3 board: Speech chip should be a TMS5200 (shared\efo_sound3.cpp)
  . Flash ROM: Added Macronix 29LV320ETTI Flash. Set the correct page size for the 29F010 (machine\intelfsh.cpp). Added MBM29LV160B. A 16 Mbit bottom-boot part, maker 0x04 against device 0x2249, read from the table of acceptable flash devices in the SX-KN7000 firmware. Assisted by Claude Opus 5 (machine\intelfsh.cpp). Added AMD 29F032 (machine\intelfsh.cpp).
  . Floppy
    . Added weak sector detection. Fixes (MESS) specpl2a and specpls3 can't load floppy images (ID 06957)(ID 07001) (formats\flopimg.cpp). Support ED disk images. Sum the raw cell times in 64 bits before packing any of them into the 32-bit cell words: for a dense enough track (e.g. ED-density, 400,000 cells at the default per-cell time of 1000) the running total can exceed floppy_image::TIME_MASK's 28-bit range well before the track is fully written, corrupting the type bits of every cell pushed past that point. Normalizing each position inline against the true grand total keeps every packed value within its final (always < 200,000,000) range from the start. Assisted by Claude Sonnet 5 (formats\flopimg.cpp). Fixed get_track_data_fm_pc dropping the last sector of every track. The loop runs "sector < sector_count", so a call with sector_count = N extracts sectors 1 to N-1 and never writes the slot for sector N, which is left with whatever the caller had in the buffer. Its MFM counterpart, get_track_data_mfm_pc_sectors, loops "sector <= end_sector" and does cover the last one, so the two helpers disagree about what sector_count means. Nothing in the tree calls get_track_data_fm_pc today, which is presumably why this has gone unnoticed. It bites as soon as a format uses it to save an FM medium: on an 8 inch IBM 3740 diskette, 77 tracks of 26 sectors, it silently loses sector 26 of every track. Also makes the induction variable int, matching the MFM version, rather than comparing an unsigned to the int parameter (formats\flopimg.cpp).
    . Added sector holes for the 10-sector variants used by h17disk (formats\flopimg.cpp). Fixed endless loop when a GCR sync mark wraps past the end of the track. Assisted by Claude Opus 5.5 (formats\flopimg.cpp).
    . Added verbose message upon loading image (imagedev\floppy.cpp). Batch sequential flux writes. Replaced write_flux with streaming write interface. The batching performance benefit from the earlier write_flux optimization is preserved: Transitions accumulate in the floppy device and are written to the track representation only at flush points, avoiding repeated track vector edits during sequential writes such as formatting (imagedev\floppy.cpp). Fixed weak-bit reads (imagedev\floppy.cpp).
    . Set weak flag for applicable sectors (formats\dsk_dsk.cpp). Standard double-density tracks were padded to 105000 cells instead of the 100000 a 300 rpm / 250 kbps track holds, so the disc spun ~4.75% fast and timing-sensitive loaders polling between bytes fell behind and dropped data. Size the track from its actual sector layout, keeping the extra cells only for layouts that need them (theatre europe on einstein). Assisted by GLM-5.1 (formats\dsk_dsk.cpp).
    . Disable LOG_DESC verbose logging left enabled during development (machine\wd_fdc.cpp).
    . Defer commands issued while a write is still live and fixed DRQ/BUSY/INTRQ ordering on force interrupt. New commands are held (delay_cmd) until a live write's trailing CRC/postamble finishes, instead of corrupting the in-flight write. interrupt_start() now drops a still-pending DRQ when aborting a busy command, matching command_end()/drop_drq() ordering. live_run() checkpoints on write completion so a late CPU register poll can't roll back a session the floppy device already closed. track_w() no longer drops writes when track_buffer is already pending, since the C1571 relies on INC-style back-to-back writes. Fixes (MESS) Commodore 1571 and 1581 MFM disk operations. Assisted by Claude Opus 5 (machine\wd_fdc.cpp).
    . Cleared the FIFO and any stale transfer state from a previous command (machine\upd765.cpp). Deassert DRQ on terminal count and prevent FIFO handling from reasserting DRQ after the DMA transfer has completed. Fixes floppy format in ct486 which enables the FDC37C78 FIFO. Fixed formatting (machine\upd765.cpp). In non-dma mode msr bit 5 (execution phase) was asserted for the whole execution phase instead of only while a byte is actually available, so the loader's poll loop lost its per-byte handshake. Assisted by GLM-5.1. Fixes (MESS) cpc6128 [goody, goodys19] freezes after loading (ID 07804) (machine\upd765.cpp). Gate dskchg with motor enable when reading DIR. Fixes (MESS) OS/2 2.x fails to recognize disks during GUI install in ct486 (ID 05573) (machine\upd765.cpp). Added mtr0_cb line for motor-on status (used by CMD FD-4000 to overclock the CPU when accessing disks), implement the DP8473/PC8477 Set Track command and added the PC8477 NSC command to identify the chip (0x72 for PC8477A, 0x73 for PC8477B). Report DIO during non-DMA read execution phase while RQM is low. Assisted by Claude Sonnet 5 (machine\upd765.cpp). st1 should be clear if drive not ready (verified on hardware), EXM should not be set at command start (verified on hardware), set EXM after sector found. Setting exm by !ST1_ND can't work for read track so just use a separate variable to indicate a byte transfer is in progress (machine\upd765.cpp). The HD63266 need not wait for a drive holding no disk (machine\upd765.cpp). Clear ST1_ND once the sector is found on writes. write_data_start() arms ST1_MA | ST1_ND, but write_data_continue()'s SCAN_ID only cleared ST1_MA, so every successful WRITE DATA reported No Data. Fixes formatting a disk on a CMD FD-2000/FD-4000. Assisted by Claude Opus (machine\upd765.cpp).
    . Removed hardcoded DSDD format, handle SSDD, DSDD, DSHD and DSED (formats\hxcmfm_dsk.cpp).
    . Moved floppy sound into a separate file (sound\drivesound.cpp) and clean up imagedev\floppy.cpp/h. Lower the spin sound delay (sound\drivesound.cpp). Fixed include guards and added floppy sound to tiny build (sound\drivesound.h). Don't spin up immediately. Approximate real-world spindle spin-up time, i.e. the delay between the motor being switched on and the drive actually picking up speed. Heavier 5.25"/8" mechanisms take noticeably longer to get going than the lighter 3"/3.5" ones. If the motor is switched off again before this time has elapsed, the spin-up sample is never started, so no sound is heard at all. Fixes incessant clicking on CMD FD-2000 disk ready polling. Assisted by Claude Sonnet 5 (sound\drivesound.cpp).
    . Support D1M/D2M/D4M disk images. Assisted by Claude Sonnet 5 and GPT-5.6 Sol (formats\d2m_dsk.cpp).
    . Treat zero master index entries in tree files as sparse. A tree file whose master index block has a zero entry has no index block for that 128K range: ProDOS allocates neither the index block nor its data blocks, and reads the range back as zeros (ProDOS 8 Technical Reference Manual, B.3.6). any_read and any_blocks fetched block 0, the boot block, and used its bytes as data block pointers, so reading such a file either failed with a block number overflow or returned blocks belonging to other files, and flopblocks/hdblocks listed block 0 and a few hundred unrelated blocks as belonging to the file. This is the same case 47891bc62b5 handled for zero entries inside an index block, one level up (formats\fs_prodos.cpp).
  . Hitachi HD44780 LCD Controller: Added parent rom reference (sed1278 and ks0066; video\hd44780.h)
  . Hudson HuC6260 VCE: Use screen() accessor to access screen (video\huc6260.cpp)
  . Imagetek I4100/4220/4300 VDP: Fixed regressions introduced when implementing sprite buffering. Some control registers need to be buffered in addition to sprite RAM (video\imagetek_i4100.cpp).
  . Intel 8251 USART: TxEMPTY remains asserted while transmitting sync characters. Empty commit to restart workflow run (machine\i8251.cpp).
  . Kaneko KC002/VU002 Sprites: Fixed notes. Hardware with 2 sprite chip is for extend sprite framebuffer output (384x256 with overlay). Cursor Grok 4.6 for analysis.
  . Keyboard: Fixed missing column select pullup (pc_kbd\pcat101.cpp)
  . Konami 005849 Video Controller: Update notes
  . Konami 054000 Protection: Updates: Fixed naming (use snake_case and lowercase variable names). Use multibyte.h for 24 bit value getter. Fixed logging and side effect checks (konami\k054000.cpp).
  . MagicEyes VRender0 Video Engine: Don't flip in vblank if the count is zero. Fixes most of the graphics in Trivia R Us dissapears when there's text in Jestbook and Funny Question Game (video\vrender0.cpp) (ID 08891).
  . MOS 6522 VIA and Rockwell R65C22 VIA: Fixed T1/T2 free-run timers going backward after underflow instead of counting down and T2 reads lagging T1 by IFR_DELAY clocks. Fixes (MESS) Commodore 1526 VIA/RIOT self-test. Assisted by Claude Opus 5 (machine\6522via.cpp). Fixed regression which broke QuickTime playback on the (MESS) Pippin. C= 1526 self-test still passes. Debugging assisted by GPT-6 Astra (machine\6522via.cpp).
  . MOS 6530 MIOT: Fixed timer_start() off-by-one tick that fired the underflow interrupt one cycle too late (machine\mos6530.cpp).
  . Motorola MC6845 CRTC: Don't recompute parameters before device has started. Added a reconfigure callback carrying the retrace positions. Added device address map (video\mc6845.cpp).
  . Namco C169 (ROZ): Various fixes and updates. Fixed per-scanline draw method to fix Speed Racer intro and in-game road. Fixed non-wrapped draw to fix Metal Hawk title logo and large ship. Fixed docs. Use Cursor Grok 4.6 (namco\namco_c169roz.cpp).
  . NCR 5380 SCSI: Protected constructors with default arguments are a bug waiting to happen. Restore base-part self-reset interrupt (regressed by GitHub #15658). Make SCSI bus reset edge-triggered. The SCSI bus reset (chip reset + interrupt) is triggered by the /RST line transitioning to true, not by it merely being asserted. The previous code triggered on the level (icmd_w reset unconditionally on ASSERT RST; scsi_ctrl_changed on ctrl & S_RST), so a device asserting RST while another device already held it would reset and interrupt a second time. Claude Opus 4.8 assisted with datasheet analysis and implementation (machine\ncr5380.cpp).
  . NCR 53Cxx SCSI Controller: Register 0xe must read as 0 on 53C94/53C96. Fixed NCR53CF94/96 features enable bit and revision read back (machine\ncr53c90.cpp).
  . RAM: Convert RAM to slot device to fix limitation of only being able to configure ":ram" from the command line & not having a UI to select the size. RAM sizes are now shown in -listslots/-listdevices & show up as slots rather than ramoptions in -listxml. Slot options are built from set_extra_options()/set_default_size(), so drivers do not require mass changing yet. size()/mask() are valid after device_config_complete(), pointer() can be called before device_start(), so the ram_device does not need to start before the device it's providing ram for. The width of RAM can be set in the drivers, allowing endian issues in state saves to be correct (machine\ram.cpp). Replaced -ramsize in comments with -ram and removed -ramsize from the docs & updated minimaws (ram_device). Updated PSX ram_device consistency, options are currently combined from set_default_size() & set_extra_options() but the other updates duplicated them for easier overriding of the default in the driver (sony\psx.cpp).
  . S3 86c764/86c968: Hookup CR50. Fixed SVGA 8-bit mode enable for Cybervision64 (video\pc_vga_s3.cpp).
  . SCSI Hard Disk: Mode sense page 0x38. Required by (MESS) EP/IX 2.1.1 on MIPS RS2030 (nscsi\hd.cpp).
  . Sega 315-5124 SMS1 VDP: Fixed regression in (MESS) Road Rash (Game Gear) after Z80 core changed (When trying to draw the title screen, the wrong part of the screen gets shifted and the game hangs) (ID 09493) (video\315_5124.cpp).
  . Sega 315-5838 / 317-0229 Compression and Encryption: Reworked the device to work with games other than Decathlete (sega\315-5838_317-0229_comp.cpp)
  . Seibu Kaihatsu SEI0210/211 Sprite generator: Fixed most GFX bugs with 'Terebi Denwa Super Mario World'. Maps sprite flipy with an alias. Align sprite vertical positions and tilemap X positions (seibu\sei021x_sei0220_spr.cpp and seibu\seibu_crtc.cpp.
  . Serial EEPROM: Handle READY/BUSY flag more accurately during writes (machine\eepromser.cpp)
  . Serial Terminal: Avoid deprecation warning (machine\terminal.cpp)
  . SiS 630/6326 VGA: Hookup lower bits of HW cursor address (pattern select), fixes cursor display in win2k (video\pc_vga_sis.cpp)
  . VGA: Clear buffer on each frame for SVGA modes. Avoid transitional artifacts for 320x240 modes (video\pc_vga.cpp).
  . Z80 CTC: Start the timer on a counter to timer mode change. A control word switching a channel from counter to timer mode without reset and without loading a new time constant left the channel dead: no timer was armed and trigger() no longer counted. The real chip retains the time constant and starts timing on the following clock cycle. Fixes cassette save on the (MESS) Luxor ABC 800/802, whose tape routine relies on this to switch the bit clock. Assisted by Claude Opus 5 (machine\z80ctc.cpp).
  . Z80 SCC Channel
    . Gate transmit FIFO full logging on LOGTX. Release External/Status Interrupt latch upon channel reset (machine\z80scc.cpp).
    . Re-Arm the transmit interrupt when a character is loaded. The "Reset Tx Int Pending" command (WR0 = 101) suppresses transmit interrupts "until after the next character has been loaded into the transmit buffer", but the disarm flag was only cleared at the end of the following tra_complete(). The transmit-buffer-empty interrupt for that very character was therefore swallowed, so a driver that writes the next character from its interrupt handler stopped after one byte. Whether it happened at all depended on the write landing while the shift register was still busy, which made it look intermittent (machine\z80scc.cpp).
    . Updated RR0 latch when Reset External/Status Interrupt command is given and another change is pending (machine\z80scc.cpp). Fixes (MESS) macplus mouse cursor gets dragged to nearest screen corner/edge during disk loading (ID 09539).
    . Fixed regression previously introduced in the case of using RTxC without the BRG. Fixed off-by-one FIFO sizes for both SCC and ESCC. MIE was doing too many things vs. the Zilog manual's description. Now it only gates the INT pin and IUS bit. Claude Fable 5.1 assisted with debug tracing and running regression tests across many SCC-using drivers (machine\z80scc.cpp).
  . Z80 SIO
    . Clear RTS/DTR flags in WR5 on channel reset
    . Fixed interrupt, DMA and status handling. Implemented 8085 three-cycle CALL interrupt acknowledge. Use channel A WR2 for interrupt mode/vector selection. Fixed special receive condition vectoring. Implement WR2A DMA request modes and interrupt suppression. Correct RR0 /RTSB reporting on channel B. Latch external/status inputs until reset and retrigger changed conditions. Suppress reset-time modem control edges. Fixed transmitter interrupt/DMA reset inhibition. Correct CRC preset and sync/hunt state handling. Tighten channel reset and first-character receive interrupt behavior. Fixes (MESS) MikroMikko 1 and 2 MPSC tests. Checked drivers that use z80sio for keyboard input are still working. Assisted by Claude Opus 5 (machine\z80sio.cpp).
    . K68564 improvements: Derive mk68564_device directly from z80sio_device. Correct XMTCTL character-length mapping. Implemented internal loop mode. Implemented MK68564 specific interrupt pending, acknowledge and vector handling. Also reset m_tx_count when starting a transmission from an idle condition to avoid additional delays - this change affects all z80sio devices. GPT-5.6-SOL was used as a research and debugging tool (machine\z80sio.cpp).
    . Only reset m_tx_count when the transmitter was fully idle. GPT-6-ASTRA was used as a research and debugging tool (machine\z80sio.cpp).
  . Zilog Z80 DMA Controller: Propagate BAO only when changed. Fixes (MESS) abc1600 stack overflow on soft reset (machine\z80dma.cpp). Sample RDY at the end of the transfer cycle. z80dma decided whether to continue a burst or block in the same callback as the write, using an RDY value the deferred update had not applied yet. A destination that drops RDY while being written was never noticed and a second spurious byte was pushed at it, corrupting (MESS) abc1600 floppy writes. RDY now tracks the live pin and the continuation decision moves one clock later, into SEQ_TRANS1_SAMPLE_READY. End of block still releases the bus in the same clock and byte-at-a-time is unchanged. (MESS) specnext_dma follows the new state. zorba relied on that extra byte to fill its row buffer in time, which exposed an i8275 pacing bug: The burst space counts character clocks between DMA requests, so measure it from DRQ rather than DACK and do not insert one before the first request of a row. Debugged and implemented by Claude Opus 5 (machine\z80dma.cpp).
- 39in1.cpp: Several Intel XScale PXA255 timer-related fixes for the Linux kernel and support more video depths for drawing (machine\pxa255.cpp).
- 3do.cpp
  . Fixes to make things boot: Fixed disc status reporting. Made missing XBus devices issure an Abort exception. The non-prototype ALG arcade games both boot, but need lightgun and coin hookups, at least. Debugging and analysis of the 3DO Portfolio source tree assisted by Claude Fable 5 (misc\3do.cpp). Updated driver flags and reword QA header (misc\3do.cpp). Orbatak wants the ALG BIOS to boot. Retire now unused 3dobios romset. Hookup Orbatak inputs. Added base inputs to md23do and sht3do. Hookup player 2 pad by default (misc\3do.cpp). Terminate the player bus (fixes CPU Bach hang & probably others) (misc\3do.cpp). Refine logging levels, make it less noisy by default (misc/3do*.cpp). Hookup lightguns for ALG games (misc\3do.cpp).
  . RISC CPU: Completed the recent 26-bit mode work so this core is now the single source for pre-AArch64 ARM implementations. Also fixed LDM with a banked base in the list, necessary for RISC OS 3's FPEmulator (which was broken on the old core too, for a different reason). Fixed LDR/STR R15 handling in 26-bit mode, which tripped up the aa680 boot ROM. Claude Fable 5 assisted with planning, the mechanical refactoring of the drivers, and the generation of a "before and after" test suite (arm7\arm7.cpp).
  . 3DO DSPP: DSPP has traditional audio DSP one-shot-per-frame scheduling on Opera vs. free-running on M2. Cleaned up frame timing vs icount and implemented AUDLOCK. Fixes DSPP mixing at roughly 39 kHz instead of 44.1. Claude Fable 5 assisted with debugging and verifying that FMV lengths in MAME now match YouTube reference videos. Implemented semaphore. Implemented the RMAP/RBASE mechanism used for register addressing on the original 3DO. Fixes MIDI playback in Sid Meier's CPU Bach. Debugging and interpretation of the Folio source assisted by Claude Fable 5.1 (dspp\dspp.cpp).
  . Madam: Support for direct 1bpp coded, 2bpp coded and 8bpp uncoded. Added CEL projector basis. Added uncoded 8bpp RLE and fixed unpacked 8bpp coded colors. Added Packed CEL 1bpp, 2bpp and 8bpp. Clear Packed buffer after drawing pixel. Implemented relative CEL source/plut addressing. CEL support for yoxy, ldsize, ldprs and ldpixc. Refine CEL timings. Added primary DF setting to alt multiply. Support for MULT 3x3 dot product and swap. Fixed 16bpp lrform=1 drawing. Implemented relative next pointer CEL addressing. Fixed CEL vcnt masking and packed bitstream for 1bpp and 2bpp. Mask woffset10 against 10 bits in packed CELs. Added PIXC Multiply Factor for 8bpp CELs. Added CEL skipx handling. Refactor CEL functions using u32 return values and a special flag for packed transparency. Implemented pover and make 8bpp alt multiply to select from P-mode. Rectify pover handling. Acknowledge use of 2s in alt_multiply. Fixed transparency for non-rectangle packedCELs and unpacked 6bpp coded CELs. Initial PIXC mixing implementation. Emulated Madam memory mapper so 1 MB VRAM works. Adjust base addresses in CEL CCBs on deselected loading flags. Fixed initial value of VDLP scanline source when fb offset is an odd value. Implemented barebones V interpolator output. Initial support for fixed CLUT. PLUT VH interpolation is from the base CEL, not the processed output. Implemented Mult types 1 and 3 and convert to fixed-point. Fixed relative CEL offsetting. Fixed P mode bit in unpacked 6bpp, account for 2D set in PIXC primary sources. Skipx also reduces number of width pixels. Implemented unpacked coded CEL with undocumented bpp=0. Initial implementation of Projector action (rectangle fills). Rectify the actual max range (misc\3do_madam.cpp).
  . Clio: Fixed Clio resetting the ARM to drop into the disc verifier. Bump VINT1 rate to 60 Hz. Hookup DSPP noise register from host side (misc\3do_clio.cpp).
  . Promoted Crime Patrol (USA, 3DO hardware), Mad Dog II: The Lost Gold (USA, 3DO hardware), Orbatak (USA, prototype) and Shootout at Old Tucson (3DO hardware) to working
- actfancr.cpp: Fixed endianness. Removed obsolete comments. CPU is Little endian, so sprite RAM should be Little endian. Also use multibyte.h for 16 bit sprite RAM getter.
- aleck64.cpp: Fixed screen refresh rate regression (nintendo\n64_m.cpp)
- amiga.cpp (alg.cpp, arsystems.cpp, cubo.cpp, mquake.cpp and upscope.cpp)
  . Fixed potential OOB palette select for OCS/ECS. Improved INT2/INT6 processing. Connect CIA 1 PA0/PA1 to SP/CNT (amiga\amiga_m.cpp). Fixed PAL frame length, CIA quantum, parallel port default and port A pull-ups (amiga\amiga.cpp/h and amiga\amiga_m.cpp).
  . Defer copper vblank restart while copper DMA is disabled. Fixes amigaocs_flop:maglines intro. Assisted by GLM-5.1 (amiga\agnus_copper.cpp). Prevent deferred updates from overwriting COPJMP2. Fixes the "lc" tests of the vAmiga Test Suite. Directly write chipset registers instead of going through the CPU (amiga\agnus_copper.cpp).
  . CDTV:
    . Connect CDTV and A570 subcode signals. Hook up 6500/1 remote control input converter. This allows the front-panel buttons for Play/Stop/Prev/Next to work. CD+G playback works now (amiga\amiga.cpp).
    . Correct port C input and interrupt latch handling (machine\6525tpi.cpp).
    . Hook up serial connection between the LC6554 LCD CPU and the CR511B drive. Controls in CD+G now work as expected, as well as the track display on the VFD. GPT-5.6-SOL was used as a research and debugging tool (amiga/cdtv and lc6500\lc6554.cpp).
    . Improved INT2/INT6 processing. Fixes cdtv:snoopy booting (amiga\amiga_m.cpp).
    . CR-511-B CD-ROM drive: Added raw P-W subcode output. Implemented direct drive control by serial interface. Keep SCOR active even for data sectors. Fixes hang after playing video in cdtv:covgrlsp. Cancel pending data transfers on a new read. Fixes cdtv:pinoc (and likely more). Report an error for invalid audio tracks. Fixes cdtv:psychoki and cdtv:psychokia. Use a table based command dispatcher. Implemented commands 0x00, 0x06, 0x80 and 0x83. Support early execution of commands by toggling the cmd line. The cdtest tool now reports "Drive Passed". GPT-5.6-SOL was used as a research and debugging tool (machine\cr511b.cpp).
    . Keep floppy DMA engine running even with no drive attached, Allows CDTV to boot without floppy drives (amiga\amiga.cpp and amiga\paulafdc.cpp).
- aristmk5.cpp, belatra.cpp, ertictac.cpp and ssfindo.cpp
  . ARM IOMD: Rework keyboard interface. Moved keyboard connector from iomd to (MESS) riscpc.cpp driver. Fixed bug causing axis inversion on reset. Various fixes towards a7000p -bios 2 boot. Moved interrupt actual hookup to client responsibility, tentatively collect all sources rather than just the active change. Use actual 2 MHz clock for timers and fixed live readbacks. Unconnect keyboards for Arcade targets. Start hooking external interrupts. Fire sound IRQ at the end of a given sound DMA. Added vidstart handling and fixed wrapping address. Fixes (MESS) RISC OS behaviour in F12 Desktop shell. vidend also needs to be wrapped in 4096 segments (machine\arm_iomd.cpp). 
  . Acorn VIDC1x/ARM VIDC20: Added mixer_device, fixes regressed sound mixing. Fixed VIDC20 new sound mode. Disable VIDC10/VIDC20 timer if sound frequency is zero. Implemented VIDC20 external sound clksel and hook it up to 'Pang Pang Car'. Make drawing a bit more safe. Converted to device_mixer_interface and moved speaker hookup to clients, fixes aristmk5 sound routing. Improved pixel clock refresh rate calculations. Acorn VIDC1x/ARM VIDC20: Fixed Acorn VIDC1x sample playback to reduce severe aliasing by correctly sequencing the 8 "channels" and properly added the FIFO and fixed the MEMC-side code to fill said FIFO. Fixed digital serial audio on the vidc20/iomd (machine\acorn_vidc.cpp).
  . Fixed 'See See Find Out' sample rate
- astrcorp.cpp: Added a List of some CGA missing games
- atarig42.cpp and harddriv.cpp: Fixed regression from MAME 0.289 for atari asic65 users ('There are a lot of clock information in device...').
- atarigt.cpp and atarigx2.cpp
  . Primal Rage protection emulation improvements and emulation correctness fix for the blood color. Align sprite pen base to the sprite's color depth. Fixes the yellow blood in Primal Rage (atari\atarirle.cpp). Answer Primal Rage protection queries with real data. Emulate the Primal Rage 136094-0004A XGA (atari\atarixga.cpp). AI assistance by Claude Fable 5.1 and Claude Opus 5. Replaced primrage table with a calculation. Use bitswap, but include reference and bail if unexpected value is used.
  . Fixed debugger side effect checks and saved state issues. Cleaned up bit manipulation code (atari\atarixga.cpp).
  . Atari XGA protection improvements. Consolidate XGA protection handling across games. Replaced Road Riot's Revenge hardcoded tables with working protection handling. Added protection handling for final/release T-MEK sets. Improved Moto Frenzy protection hookup with the knowledge gained from the above. Further verify the work done by Andrea Bogazzi on Primal Rage. Use GPT-6 Astra Extra High. Removed the legacy protection hacks. Co-authored-by David Haywood (atari\atarixga.cpp).
- atlantis.cpp and midzeus.cpp
  . Rendering improvements. Fixed fast clear leaving depth buffer at nearest. Added untextured solid-color quad path. Clamp translucency factors to fix darkened cars. Decode SGRAM fill color/depth per R5E bit 5. Assisted by Claude Opus 4.8 (video\zeus2.cpp).
  . midzeus.cpp: Allow TMS320 CLKSRC to set internal clock. The driver fakes the C3x on-chip timers and hardcoded the counter at 100ns, but every game programs CLKSRC, which clocks it from the internal clock at H1/2 = CLKIN/4 = 15MHz. This didn't bother The Grid or MK4, but broke Crusin' Exotica.
  . Derive the dot clock from the divider in reg 0x31, hook up render XOffset and report VCOUNT in unscaled lines. Fixes several issues with Skins Game (video\zeus2.cpp).
  . Improved depth and blending. Treat depth-min register as floor, not per-object bias. Depth-test the alpha textures the game asks to. Decode the blend factors in reg 0x40 (video\zeus2.cpp).
  . Fixed commands 0x38, 0xa7 and 0xaf. Fixes announcer's face in The Grid. Fixed solid-fill color register (video\zeus2.cpp). Got rid of static pointer to device member. Replaced a pile of macros with class members. Use cleaner code for swizzling offsets. Got rid of a pile of redundant inline qualifiers and casts (video\zeus2.cpp).
  . Display interrupt on the programmed vsync line. Both generations raised it at the end of active video. mk4 programs 259 into reg 0xC8's high half against 256 active lines, then tests the line counter for equality with 256 to choose between a fast clear and repainting the background with a full-screen quad, so firing at 256 took the fast clear every frame and lost the background. Zeus 1's 0xC6/0xC8/0xCA are Zeus 2's 0x34/0x35/0x36 with the same layout: 259 for mk4 and Invasion, 402 for crusnexo and thegrid, 258 for mwskins. IRQ0 is pulsed, not held: it is level-sensitive with ST bit 14 clear, and the core re-sets IF from a held line as the trap is taken (video\zeus2.cpp).
  . Fixed frozen screen edges and colour key bleed. Take the solid quad's maximum as inclusive. mk4 and invasn fill the screen with a solid quad at (0,0)-(399,255), but poly.h's extents are half-open, so the depth at column 399 and row 255 was never reset and both lines froze. The quad was never a debug path, so name it for what it draws. Key the nearest filter tap, not texel 0. The colour key tested only texels[0] of the four filter taps, so a transparent neighbour bled its palette colour into glyph edges: MK4's round timer carried 18 px of pure green where the PCB has none. Keyed edges also move half a texel, onto the nearest texel instead of the one below it (williams\midzeus_v.cpp).
- bfm_cobra3.cpp
  . Hook up MC68340 DMA and correct board signals. Read multiplexed inputs from the connected byte lane, pass the video controller interrupt at its asserted polarity and connect the active-high SCSI request to the DMA controller's active-low DREQ input (bfm\bfm_cobra3.cpp).
  . Added preliminary MPEG audio decoder. Implemented the host data interface, active-low reset and request signals, and MPEG-1 Audio Layer II playback using MAME's existing MPEG audio decoder. Improved buffering, control and save-state handling. Map host registers individually. Use fixed-width REQ state. Streamline silent audio output (sound\tms320av110.cpp).
  . Added MPEG-1 video decoder (video\mpeg_video.cpp). Added preliminary SGS-Thomson STi3400 MPEG-1 video decoder emulation (video\sti3400.cpp). Added MPEG video decoding to Bellfruit Cobra 3. Separate video rendering from composition. Preserve main RAM in save states (bfm\bfm_cobra3.cpp).
  . Added cabinet controls, layouts and support save states. Added initialized NVRAM defaults for all five games. Use pairs in layout scripts (bfm\bfm_cobra3.cpp).
- blzntrnd.cpp: Moved Blazing Tornado and Grand Striker 2 from metro.cpp to their own driver blzntrnd.cpp
- cdi.cpp
  . CD-i 220 LCD: Enhanced Front Display. The LCD display now has indicator lights. Previously these were erroneously displayed as an 8th digit. This maps the Play and Pause indicator lights on the front panel. Visible when using audio CDs. Fully wires up the LCD display. Map Mute Button (philips\cdi.cpp and philips\cdi220_lcd.cpp). Make 'CD-i 220 LCD' a device. The cdislave hle currently has partial ownership of the LCD panel's state. This makes it harder to replace the slave_HLE with the DSP chip. This change provides a cleaner separation by using a callback, similar to other devices the slave interacts with (philips\cdi220_lcd.cpp).
  . CDIC MCU: Moved CDIC attenuation table to slave HLE. Reverse engineering revealed the attenuation lookup table is in the slave, not the CDIC. This uses the proper lookup table instead of the powf approximation. The result is <0.5% difference in volume (philips\cdicdic.cpp and philips\cdislavehle.cpp). Fixed Multitrack Audio Discs. Allows multitrack discs to play correctly. Previously only the first 1 or 2 tracks worked reliably (philips\cdicdic.cpp). CD+G Graphics. Sends the CD+G subcode data to the CPU for rendering (philips\cdicdic.cpp).
  . SLAVE MCU: Fixed Opcode length and rename Flag. Adjusted handling of "Disable Input Polling" mode and renamed to "Debug Mode" (philips\cdislavehle.cpp). Added Test Plug. Allow access to a test menu by booting the console with the Test Plug set (philips\cdi.cpp and philips\cdislavehle.cpp). Play Music CDs. This added a small disc-type check to the CD-i Slave HLE. This allows it to recognize music CDs, which triggers the CD player mode. Fixed CDIC Audio Track Size (philips\cdislavehle.cpp).
  . SCC68070 peripheral: Cleanup Reset. The reset function has duplicated code and is slightly out of sync. This merge corrects a few mismatches. This likely impacts no games. Also added RAM time to the cdimono2 (philips\cdi.cpp and machine\scc68070.cpp). Make Quizard 1-4 boot again (machine\scc68070.cpp and philips\cdi.cpp). Added AI-modified MCUs for the various languages supported by the Quizard set. Analysis by GPT-5.6 Sol. Improved serial interface/UART behavior (machine\scc68070.cpp). 
  . MCD212 Video Decoder: Fixed Layer Mixing. In some cases, both Path 0 and Path 1 try to set the Matte control. If both try to set it, Path 0 should win. Interleave ICA Execution. Fixes blank screen in (MESS) Abrunhosa & Bandemonio. The Greenbook is clear that if both attempt a write at the same time, then path 0 wins. Improvements to color range (Darken Black Level): Adjust black level to account for NTSC white-point/black-point range. Perform range clamping after plane mixing rather than to each plane independently. Avoid clobbering VSR field in DCR register. Expand MCD212 color range from 16-240 to 0-255, significantly improving DVC mixing (philips\mcd212.cpp). 
  . Digital Video Cartridge: Added MPEG-1 video decoder (video\mpeg_video.cpp). Added Digital Video Cartridge (VMPEG) emulation and NTSC support via cdimono1n machine (philips\cdi.cpp). Added accessors needed by the CD-i Digital Video Cartridge (video\mpeg_video.cpp). Fixed joint stereo band decoding (sound\mpeg_audio.cpp). Added an MPEG-1 system stream demultiplexer (machine\mpeg_demux.cpp). Added CD-i full motion audio decoder (sound\gsc38gg307.cpp). Added MPEG-1 full motion video decoder (video\mcd251.cpp). Fixed DVC Stall on Reset. Currently a soft reset (F3) causes the boot to hang. This is because the rw handler is not reset. This fixes that by setting the read write handler on start, and using enable guards in the functions instead (philips\cdidvc.cpp). Fixed Audio Mixing Levels. DVC Audio Attenuation: Implements missing audio attenuation for the new DVC device. As the comment at the top says, this would normally be handled by the DSP, but that's not implemented, so this handles it itself. Scale Volume: The DVC audio is too loud with respect to the CDIC mixed audio. This fixes that (sound\gsc38gg307.cpp and philips\cdicdic.cpp). Added Layer 1 MPEG Audio (sound\gsc38gg307.cpp and sound\mpeg_audio.cpp).
  . CD-i Service PCB: Implemented CD-i serial test device (philips\cdipcb.cpp).
- cedar_magnet.cpp
  . New games (Cocomania, Dodge Ball, Double Dragon, Flying Shark, Super Contra and World Wars) and improvements.
  . Added new reconstruction disk to Dracula's Castle (Magnet System) - Promoted game to working. Better dumps for 'A Day In Space (31/03/87)' and clone clone 'War Mission (WM 09/04/87)'. Marked 'Booby Kids (CC, Magnet System)' as BAD_DUMP because of the missing tracks (hence the different size).
- chihiro.cpp: Fixed crash regression (shared\xbox.cpp)
- cinemat.cpp: Fixed visible area typo. Fixed display regression (vector list should be cleared after each frame).
- cmmb.cpp: Promoted 'Centipede / Millipede / Missile Command (rev 1.03)' and 'Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62)' to working. Grok 4.5 assisted with reverse-engineering and Claude Opus 5 assisted with a cleanup/refactor pass once everything worked.
- cobra.cpp: Firm up the CPU to CPU handshaking and recent PPC timing improvements had broken bujutsu booting. Debugging assisted by Claude Fable 5.1.
- cobracom.cpp, ghostb.cpp, lastmisn.cpp, oscar.cpp and srdarwin.cpp
  . Split dec8.cpp driver for different hardware configurations (dataeast\cobracom.cpp, ghostb.cpp, lastmisn.cpp, oscar.cpp and srdarwin.cpp)
  . Fixed save state/memory region size (reduced unnecessary areas in ROM regions)
  . Fixed potential out-of-bounds bank selection in dataeast\lastmisn.cpp.
  . Use memory_share_creator for 16-bit copy of sprite RAM.
- cv1k.cpp
  . Fixed CV1000 video timings. See: https://github.com/buffis/cv1k_research/tree/main/Video_Timings for analysis incl logic analyzer images/raw data.
  . Hitachi SH7709S: Fixed up background cycle accounting and bank conflict checks. Fixed burst write penalty. Fixed precharge conflict timing to use banks. Adjust background cycle accounting. Fixed address used for writeback accounting. Timing fixes + icache sampling changes. Added full icache tracking compile option. Added a couple of extra comments about slowdown oddities that show up in some titles. Added critical word first handling. Fixup background cycle accounting. Fixup some tpc/writeback accounting Don't need to use m_precharge_remaining_cycles as it's a fixed cost we can calculate on the background elapsed cycles. Fixed critical word first handling. Fixed AMX decode table for sdram bank. Move WCR1 to background accounting. Model remaining cpu cycle waits. Added cache port contention handling. These old single port CPU caches with unified I+D cache fight with the pipeline that can have some extra stalls as cache hits are not always "free" anymore. Added a simple model for estimating these contentended cycles. Fixed savestate issue and small cleanup (sh\sh7709s.cpp).
  . Added nandflash r/w and sound write timing (cave\cv1k.cpp). Added nandflash ready delay timing (machine\nandflash.cpp). Also track penalties for EEPROM access. Use the game uncached area access addresses (cave\cv1k.cpp). Added blitter r/w access penalties. Steal bus cycles on blitter uploads (cave\cv1k_v.cpp).
- cyclemb.cpp and kingdrby.cpp: Normalize blue palette
- digdug.cpp, galaga.cpp and xevious.cpp
  . Got the xevious_state and derived stuff out of galaga.cpp so the classes and files actually have a correspondence to each other. Required copy/pasting a crystal value and a planar graphics layout.
  . Removed Namco custom chips from Battles bootleg and generally cleaned up. Cleaned up machine configuration, reduced literal tags and tag lookups, cleaned up bit manipulation and added side effect checks to reads. Added missing items to saved states for Battles. Consolidated in one file and moved relevant notes from namco\galaga.cpp.
  . Put all the stuff related to digdug_state in one file to reduce confusion and reduced literal tags slightly (namco\digdug.cpp). Keep only the actual shared stuff in the base class (namco\galaga.cpp).
- djmain.cpp: Passwords no longer include the control word that is part of the command
- dyna_dc4000.cpp
  . Added GFX emulation, inputs and hopper. Games appear to be mostly playable, but need extensive testing. Claude Opus 5 reverse-engineered the blitter.
  . Replaced bad dumped gfx rom in Cherry Master '92 (V1.2D)
- dynax.cpp and royalmah.cpp
  . Correct protection implementation for games based on TMP9* using the internal ROM. cafedoll, clone cafedollg and ougonhai now boot.
  . Descrambled GFX for cafepara and cafebrk. Correct ougonhai memory map. Integrated GitHub #15838 in a more MAME-like way. Fixes mjtkp2 GFX/colors. Thanks to the original author Gently28. Fixed mjtkp2 remaining GFX glitches.
  . Split TMP* based games in a subclass (royalmah.cpp only). Cloud Opus 5 helped with the reverse engineering and documening of the exact protection mechanism and the cafepara/cafebrk GFX ROM descrambling.
  . Correct GFX for Bao Qing Tian (TIC). Claude Opus 5 identified the issue.
- fastfred.cpp: Merged driver into single file
- firebeat.cpp and twinkle.cpp: Added configuration register reads. Added IDE (preliminary, doesn't seem to work right in riscpc). Fix enable bit (CR0 bit 0 not 1). Fixed MIDI 2 clock select (CR4 bit 5 not CR5). Changed default value on IDE ports to match rpcemu-extended. Fixed IDE addressing and added 16bit read/write handlers (machine\fdc37c665gt.cpp).
- gberet.cpp and jailbrek.cpp: Screen width is 256. Added 2nd spriteram bank to jailbrek.cpp. Update notes (konami\k005849.cpp). Fixed possible cliprect issue.
- gms.cpp: Dumped EEPROMs for sglc, sjms and tbss.
- gstriker.cpp
  . Fixed interpretation of line table to use signed per-line and per-pixel steps. Fixes pitch in gstriker/vgoalsoc/twcup94. Debugging, mathletics and the explanation comment were assisted by Claude Fable 5.1 (vsystem\mb60553.cpp). Improved video priority. Fixed ADPCMB sound in V Goal Soccer.
  . Protection simulation for V Goal Soccer and Tecmo World Cup '94 and clones greatly improved pending MCU dumps. Protection reverse-engineering assisted by Claude Fable 5.1.
- hng64.cpp: Implemented 8-point windowed sinc interpolation, as Akai advertises the chip to have. Improves sound detail quite a bit over the previous no interpolation (sound\l7a1045_l6028_dsp_a.cpp).
- hyprduel.cpp: Fixed input name via usage and naming in test mode
- itgambl3.cpp, menghong.cpp and sanremmg.cpp: Bugfixes to M16C disassembler found with an Apple PMU99 firmware binary. ADJNZ/SBJNZ weren't handling the imm4 field properly. ROT/SHA/SHL count is signed magnitude, not twos-complement. 32-bit register pairs were not printed correctly due to order-of-operations. BMCnd condition decoding was wrong. Long JCnd displacement is not signed. bit,base:16[SB] was not showing the bit number correctly. PUSHM register order was wrong. BNXOR was being called BXNOR. UND instruction was not decoded. dsp:16[An] / dsp:16[SB] were shown incorrectly. Grok 4.6 assisted verifying the divergences from the M16C Software manual (m16c\m16cdasm.cpp).
- jaguar.cpp: Implemented documented latch so the RISC CPUs don't see incomplete/corrupted data from the 68k & up the interleave. (MESS) Jaguar Doom is now fully playable. Debugging assisted by GPT-6 Astra.
- karnov.cpp: Documentation updates. Correct some ROM labels for 64street, avspirit, phantasm and edf. Added in PCB locations as where missing for said sets. Updated a few comments. Changed comments in the ROM def area to C++-style. Added comment about interesting 64street set.
- konamigx.cpp and mystwarr.cpp
  . PSAC4 fake-voxel implementation for opengolf and racinfrc. GPT-6 Astra assisted with the reverse-engineering, math and analysis of direct-feed video from hardware.
  . Removed debug keys, fixes input assignments for Racin' Force. Fixed frame skipping. Added vblank note (sidenote: if it was update_before_vblank, this workaroud wouldn't work, since screen_update is called *before* vblank start handler) (konami\konamigx_v.cpp). Hookup shifter layout for Racin' Force.
  . Many updates: Support added for per-tile alpha and related hacks were removed. True additive blending is now done, the invert-alpha hack is gone. Shadow priority is now supported. This greatly improves clone gokuparo. Shadow layer selection is supported (the SHD ON register). Bug fixed that caused shadows to use the previous frame's data. Claude Opus 5.5 assisted with planning, debugging and automated regression testing. Manual testing against the 0.289 release was also done for every System GX game (konami\konamigx_v.cpp). Fixes fade in/out effect applied to the wrong layer in Fantastic Journey (ID 09164). Got rid of a lay of indirection on work bitmap (bitmaps are always dynamically allocated). Reduced literal tags in address maps (more kept creeping in) (konami\konamigx.cpp).
  . Update MysticWarr driver to unlock all the konamigx improvements. Correct a regression.
  . Promoted Racin' Force (ver EAC) and clone Racin' Force (ver UAB) to working
- lazercmd.cpp: Lower DAC volume
- mcr.cpp: Moved most public stuff to protected / private
- megadriv_ybox.cpp: Improved protection simulation for xmvsfmb, songjang and shuifeng. All but cleanups done by Claude Opus 5.5.
- model3.cpp
  . Mask texture coordinates in get_texture(). Fixes crash due to out-of-bounds read (sega\model3_v.cpp). Fixed and modernize sound banking. Avoid the need to mirror in oversized sample ROM regions.
  . Redumped bad IC17 ROM for 'Virtua Striker 2 '98 (Step 2.0)'
- namcond1.cpp: Fixed scroll + Updates. Use callback for gfx ROM bankswitch. Fixed row/column scroll, for either ROZ and non-ROZ, with/without raster IRQ. Fixed side effects for debugger reads, code style, documents and save state support. Make some variables constant. Reduced duplicates and preprocessor macros. Use short types for consistency. Cursor Grok 4.6 and Claude Opus 5 for analysis and co-write draw routine (namco\ygv608.cpp).
- namcos1.cpp: Use input_merger for watchdog and callback (namco\namcos1.cpp and namco\c117.cpp). Fixed possible crash.
- namcos2.cpp: Fixed sprite zoom algorithm. Use scalelut region for zoom y calculation. Hardware is evolution of Pole Position hardware (namco\polepos.c), so I copied and modified for namcos2 sprite hardware (namco\namcos2_sprite.cpp). Differences: Padding/"Ignored" bytes: 0x80 (polepos) vs 0xff (namcos2_sprite). namcos2_sprite has vertical flip feature, scale LUT region accessed to top half when flipped. Scale LUT is twice as large for handle vertical flip in namcos2_sprite. scalelut is from Ordyne, when not dumped from hardware (should be dumped from these hardwares?). Analysis assisted with Cursor Grok 4.6 (namco\namcos2.cpp and namco\namcos2_sprite.cpp).
- namcos10.cpp: Decrypted three more games. Decrypted 'Knock Down 2001', 'Slot no Oujisama / Slot Prince' and 'Gegege no Kitaro Yokai Yokocho Matsuri de Battle Ja' games. GPT-5.6-SOL model used to build tool implementing known plaintext attack on encryption (namco\namcos10.cpp).
- namcos22.cpp
  . Removed some redundant m_poly->wait() calls in screen_update. Replaced render_triangle_fan usages with render_polygon & render_triangle. Use render_polygon rather than render_triangle_fan for rendering clipped quads (namco\namcos22_v.cpp).
  . Clip extents before calculating its parameters (video\poly.h). Fixed lighting when using shared normals. Use double instead of float for extent params in render callbacks (namco\namcos22_v.cpp).
  . Increase quantum for non-super 22. Ace Driver and Ace Driver: Victory Lap video test writes 1 to DSP RAM to trigger drawing but then clears it back to 0 after 616 cycles; needs quantum frequency at least 40 kHz to ensure the master DSP can read it in time (namco\namcos22.cpp).
  . ss22 uses per-poly fog (GitHub #16224) (namco\namcos22_v.cpp). SS22 video PCB uses C397, not C387 (verified by Guru). Also revision A has four each of C400 and C401, same as later revisions.
  - Added additional developer inputs (fine-increment/decrement and freeze-toggle) for Armadillo Racing
- nexus3d.cpp: Misc notes
- nss.cpp, sfcbox.cpp and snesb.cpp: Fixed HIRQ enable behavior. Fixes flickering in (MESS) Doom and freeze in Mortal Kombat II. Debugging assisted by Claude Opus 5.5 (nintendo\snes.h and nintendo\snes_m.cpp).
- pgm.cpp: Improved ICS2115 register 0x10 implementation. Minor revert volume envelope behaviour (previous improvement retains to comment) (sound\ics2115.cpp). Fixes kov and kovplus speech cuts out at the title screen (ID 09541).
- polepos.cpp: Added clock on POLEPOS_SOUND for bootlegs. Fixed missing engine sounds.
- policetr.cpp: Updated comments. Use machine configuration functions rather than crazy class hierarchy to set speedup hack parameters.
- popobear.cpp: Added NVRAM to magkengo and qiwang
- pspikes.cpp: Fixed screen flip for Turbo Force and clone Aero Fighters (Taiwan / Japan, set 1). Replaced the hand-tuned flip constants with values measured from the games themselves. The vsystem_spr2 mirror constants (previously hardcoded 308/208, only correct for clone Aero Fighters (Taiwan / Japan, set 1)) become per-game configuration, and the mirror is now zoom-aware. Write all 512 rowscroll entries instead of 256 so the mirrored row indexes read by a flipped tilemap are initialized. Co-Authored by Claude Opus 5.
- rastersp.cpp: Fixed endianness issues on screen update (good example of why the *_XOR_(BE|LE) are confusing to use)
- royalpkr.cpp: Improved IRQ handling. Added ACRTC maps for the high and medium resolution. Preliminary inputs from research of the dumper. IRQs handling improvements and palette hook-up for low and medium res games and config/serial reversal (where not documented by the dumper) done with assistance of Claude Opus 5.
- seattle.cpp: Initialize register file and timer state at reset. Fixes intermittent failure to boot on some Atari games (machine\gt64xxx.cpp).
- segas32.cpp: Added per line clipping for titlef, jpark and ga2. Fixes per line clipping (spotlight) issue in ga2, ga2u and ga2j (ID 05233).
- segasp.cpp: Dumped PIC16C621A microcontroller for 100&Medal Kazaaan!! and (PIC16F628A) for Arabian Jewel
- stella8085.cpp: Don't instantiate devices that don't exist. That shouldn't have been merged in the first place.
- stv.cpp
  . Sega Saturn DCC
    . Moved DCC dual CPU comms to an own device. Make it handle slave irq vectoring. Recitify slave irqs a bit. Fixes colmns97 and wwshin sound going screwy (ID 04187) (sega\saturn_dcc.cpp).
    . Bump up base divider interleaving. Fixes sandr and clones hangs during 2nd gameplay attract demo (music continues) (ID 09516) (sega\saturn_dcc.h).
  . Sega Saturn SMPC
    . Make CKCHG320/CKCHG352 slower. Fixed vblank-in generation at 240 with VRES=0. Trying to enable a CPU that is already enabled resolve in a NOP. Partially fixes (MESS) gnine97/gnine98 (sega\smpc.cpp).
    . Reset a bunch of things with dotsel command triggered. Delay a bit consecutive CPU enable/disable NOP commands. Allows (MESS) 3dbball* to be bootable again (sega\smpc.cpp).
    . SMPC was halting the master SH-2 immediately; there should be a few cycle delay (sega\smpc.cpp).
  . Sega Saturn System Control Unit
    . Convert interrupts to IRQ_CALLBACK_MEMBER. Rewrote timer 0/1 logic. Cleanup, use enums for interrupt sources and DMA operating modes. Initial implementation of a DMA orchestrator (fixes diehard and dnmtdeka have no sound - GitHub #15769) (sega\saturn_scu.cpp).
    . Operational changes: Treat DMA direct mode as burst, indirect as cycle steal. Gain back a bit of performance by setting DTACK changes at DMA starts and stops only. Set a flag on DMA buses origins, disallow same bus transfers. Groundwork for setting cycle penalties. Fixed pfght regression using DMA as fill. Attempt to fix irq status non-dword writes ((MESS) burningr*, no noticeable change) (sega\saturn_scu.cpp).
    . Added a more consistent delay between DMA wait and move ops. Fixes regressions in danchih, danchiq and (MESS) avg and dejig* (sega\saturn_scu.cpp) (ID 06270).
  . Sega SCUDSP
    . Rewrote DMA to use a timer and removed instant hack. Make sure to honor C-Bus transfer fixed adds rule with DMA. Fixes (MESS) mshvssf bad colors in main menu and gameplay (scudsp\scudsp.cpp).
    . Refine some DMA loose ends: C-Bus DMA reads actually can be either 0 or 4. B-Bus DMA reads are hardwired to +4. DMA CTx pointers actually increments on every transfer (scudsp\scudsp.cpp).
    . Fixed ALU output for NOP. DSPs are weird. Update the multiplier when anything changes RX. Fixes T&L calculations in (MESS) vkyoute2 (scudsp\scudsp.cpp)
  . Sega Saturn VDP1
    . Avoid using vertical cell scroll with linezoom for now, avoid 'Batman Forever' The Riddler stage going 0% emulation speed (ID 07203) (sega\saturn.cpp).
    . Make sure sonicjamj (hash\saturn.xml) doesn't fail SCU DMAs to VDP2 back-to-backs for now (sega\saturn_scu.cpp and sega\saturn.cpp).
    . Fixed sprite window in interlaced mode. Fixes (MESS) amoudan GFXs in main menu and gameplay. Implemented VDP2 4bpp bitmap with zoom mode (sega\saturn.cpp).
    . Don't do sprite window if type is invalid. Fixes several empty dot cases and (MESS) saturnjp [kof96, kof97, samsho4]: VDP1 transparency issue with several games (ID 07508) (sega\saturn.cpp).
    . Fixed VDP1 GFX alignment with flipy + clip y. Fixes (MESS) draculax inverted castle map plus some enemies glitching out when on top of screen (sega\saturn.cpp).
    . Added poorly documented VDP1 drawing trigger behavior required by (MESS) Doom and Exhumed. Properly invalidate the RBG0 cache. Fixes missing water in (MESS) vkyoute2 (sega\saturn.cpp).
    . Fixed two VDP1 corner cases that games using Sega Graphics Library hit (e.g. madden97u). Debugging assistance by Claude Fable 5.1 (sega\saturn.cpp).
  . Sega Saturn VDP2: Moved CRTC logic in a new VDP2 device. Make it generate blank signals. Fixes saturneu [test1f] debug assertion (ID 05855) (sega\saturn_vdp2.cpp).
  . Sega Saturn/ST-V CD Block HLE
    . Fixed regression with CD auto boots. Fixes (MESS) saturnjp [azelpanztai]: Special Function Code Select enable 0004 0000, contact MAMEdev (ID 04951). Reset pending playback parameters when issuing a disc seek command. Added logging for disc status changes. Yield commands until status changes are performed. Make it play along with seek rules. Fixes (MESS) jungrhyt crashing when repeating a stage (sega\saturn_cd_hle.cpp).
    . 0x61 and 0x63 commands needs to calculate proper sectofs/sectnum before checking for a possible rejection. Fixes (MESS) shadtusk crash at startup (sega\saturn_cd_hle.cpp).
    . Improved reset selector semantics (sega\saturn_cd_hle.cpp).
    . Better handling of no disc cases: Fixed regression where tray open/close will just hang the emulated machine. Make it play along with the recently added status changes. Reset tray status only during power-on not device_reset. Fixed #15884 (sega\saturn_cd_hle.cpp).
    . Execute command even if CD isn't inserted and fixed modem status readback regression. Read ADR in TOC properly. Fixed curfad filter rejection range (sega\saturn_cd_hle.cpp).
    . Read ADR in TOC properly. Fixed curfad filter rejection range. Read TOC sets DTREQ only, doesn't change drive status. Fixes (MESS) hisspach boot (sega\saturn_cd_hle.cpp).
    . Improved redbook track resume and restart. Avoid (MESS) dendego crash on title screen, make Multiplayer Audio CD playback a bit more solid. Make repeat to honor seek phase and fixed redbook range. Fixed repeat assertion failure. Removed dubious handling of get status command (sega\saturn_cd_hle.cpp).
  . Hitachi SH-2 (SH7604): Implemented standby mode that SLEEP kicks the SH-2 into and fixed a bug with FRT capture (sh\sh2.cpp and sh\sh7604.cpp). Fixed SH7604 on-chip divider corner cases (sh\sh7604.cpp).
  . Start converting IOGA to use 315-5649. Hook it up to standard stvbios. Hopper, critcrsh and mahjong panel variants TBD. Hookup inputs for fanzonem and wwshin. Removed magzun boot patches. Demoted wasafari to MACHINE_NOT_WORKING (no way to rotate crank input in-game). BREAKING CHANGE: magzun now just black screen out of removing said hacks.
  . Make stvbios to use a 6 button input def. Added a dump cart header debug facility. Cart empty space 1-fills, fixes a bunch of IC13s still failing ROM test along the way (sega\stv.cpp).
  . Demoted 'Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)' to MACHINE_NOT_WORKING. Note: Don't think it ever worked, has random sync problems with SH-2 reading sound RAM.
  . Promoted colmns97, danchih and danchiq to working. Cleaned up various Saturn code and made relationship between headers, sources and classes less confusing.
- system16.cpp: Emulated Beauty Block / IQ Pipe protection (Reverse engineering by Claude Opus 5). Fixed gfx in Beauty Block & IQ Pipe. Added dipswitches to Beauty Block and IQ Pipe. Promoted games to working.
- taito_l.cpp and tnzs.cpp: Lower cpu quantum a bit
- taitogn.cpp and zn.cpp
  . ZOOM ZSG-2: Narrow the current-volume readback to 13 bits. Fixes a problem where 'Shikigami no Shiro' sound test 05 steals voices during the intro. The Taito G-NET Zoom sound driver polls channel register 0xb every tick and stores (value >> 7) into a per-channel byte whose bits 6 and 7 are "held" and "priority" flags used by its voice stealer. Returning the full 16-bit ramped volume set the priority flag for every note with a volume of 0x4000 or more, and once no lower key cleared it again the stealer preferred cutting audible notes over reusing silent channels. Claude Fable 5.1 disassembled the sound driver (sound\zsg2.cpp).
  . Use logmacro.h (machine\rf5c296.cpp)
- vectrex.cpp: Fixed regression caused by vector list overflowing (miltonbradley\vectrex_v.cpp)
- viper.cpp: Read the ADC0838 in differential mode. The low nibble of the I2C address is the ADC0838 multiplexer word. In differential mode ODD/SIGN selects the polarity of the channel pair. Co-Authored by Claude Opus 5.5 (konami\viper.cpp).
- 39 in 1 MAME bootleg
  . Correct or added decryption for all sets and redid the CPLD protections using correct math. Claude Opus 5 assisted with the decryption, reverse-engineering of the CPLD protections and portions of the explanatory comments.
  . Promoted clones 4 in 1 MAME bootleg (PLZ-V001), 4 in 1 MAME bootleg (ver 3.00, PLZ-V014), 48 in 1 MAME bootleg (ver 3.09, HPH-V000, alt flash) and 60 in 1 MAME bootleg (ver 3.00, ICD-V000) to working.
- Attack UFO: Fixed vertical retrace rate (sound\mos6560.h)
- Backfire!: Fixed sound routing
- BanBam: Hook up MCU for BanBam and clone Pettan Pyuu (Japan) and removed simulation. GPT-5.6-SOL was used as a research and debugging tool.
- Capcom Baseball: 3rd coin is actually service coin. Improved clocks.
- Check Man: Lower AY-3-8910 volume for clone Check Man (Japan)
- Cool Gunman: Dumped PCM ROM
- Cross Puzzle: Made it boot. Reversed by Claude Opus 5. Applied feedback.
- Cruis'n Exotica: Rework dashboard layout to match the real cabinet. Added unlit radio button (layout\crusnexo.lay). Updated release date for the latest Cruis'n Exotica version according to a Midway service bulletin (https://arcarc.xmission.com/PDF_Misc/Midway Software Versions as of 02-12-2001.pdf). Correct DIP name.
- Dark Seal: Improved tilemap priorities and rowscroll (bossfight just before final boss)
- Dragon Gun: Added decrypt function for a future i750 implementation to pull bytes through plus a small self-test. Claude Fable 5.1 assisted with reverse-engineering of the decryption, including a Python proof-of-concept and GPT-6 Astra assisted with a Python i750 emulator that proved the decrypted results decode to correct video using dragngun's own program.
- Dynasty: Dumped gfx rom for Dynasty (1992, V5.1G)
- Enduro Racer: Fixed end address off-by-1 regression (sound\segapcm.cpp). Fixes broken engine sounds in Enduro Racer (ID 09512).
- Euro Bingo 7: Added PAT PLD and counters SEEPROM dumps
- F-1 Grand Prix: Implemented screen flip. The flip bit in gfxctrl was latched but never used. The ROZ layer is not flipped by the video chip at all: The game writes a mirrored 053936 transform matrix itself. Removed MACHINE_NO_COCKTAIL from the f1gp sets; f1gp2 keeps it (different video path, still not implemented). Co-Authored by Claude Opus 5.
- F-1 Super Battle: Emulate F-1 Super Battle math coprocessors and road layer (GitHub #16135): Sprite/Eoad priority mixing. Rroad planes, backdrop layers and scroll timing. Text layer timing and minimap sprites. Priority RAM mixing, coprocessor LT condition. Road planes as single layers with line depth (jalfpu\jalfpu.cpp). Make F-1 Super Battle line colour tables local to the mixer. Avoid left shifts of negative values in F-1 Super Battle line planes (jaleco\ms32_v.cpp). Co-authored-by Claude Opus 5. Promoted game to working.
- Fancy Bowling: Made the game boot. Claude Opus 5 identified and solved the boot problems (missing ident of the CF card, UART communication getting stuck and blocking boot).
- Flash Beats: Added waitstates to sound map as dictated by SCSP delayed MSLC. Fixes hiccups once SCSP start playing samples. Normalize address_map. Fixed input mappings.
- Grand Striker: Promoted 'Grand Striker: Human Cup (Europe, Oceania)' and and clones 'Grand Striker: Human Cup (Americas)' and 'Grand Striker: Human Cup (Japan)' to working
- High Seas Havoc: Improved decryption and hooked up PIC and inputs. Claude Opus 5 did most of the reverse engineering. Promoted game to working. Keep MACHINE_UNEMULATED_PROTECTION flag.
- Il Galeone: Added PLD dump
- Johnny Nero Action Hero: NEC VR5500 has unique page mask and Config encodings vs. stock MIPS III. Fixing this allows jnero to write a correct display list instead of garbage (mips\mips3.cpp and mips3com.cpp).
- Jongputer: Use decryption PROM instead of XOR tables for clone VS Computer Mahjong, fixes at least the stuck sound (constant tone in-game after the mahjong tiles are laid down). PROM hook-up by Claude Opus 5.
- Lady Gum: Marked PLD (locked) as bad
- Les Fiches: Correct cpu type
- Loto-Play: Added logic and layouts. Promoted Loto-Play (MC68705, set 1, with roulette) and clones Loto-Play (MC68705, set 2, with roulette), Loto-Play (MC68705, set 3, with roulette) and Loto-Play (PIC16C54, with roulette) to working. Assistance from Claude Opus 5 Max.
- Loto-Play programming device: Z80 sets are devices for programming Loto-Plays, not Loto-Plays. Now "lotoplayzx" sets no longer are clones of "lotoplay", but of the new parent "lotoplayz". Also added a new MC68705 set and put the speaker to all sets that have one. Split the programming devices on a separate file.
- Mayjinsen 2: Demoted Mayjinsen 2 as MACHINE_IMPERFECT_GRAPHICS via missing tilemap scroll emulation. Reference video at https://youtu.be/mMEvKZM6mkk.
- Mahjong Shinkirou Deja Vu: Fixed CPIR infinitely looping (tlcs90\tlcs90.cpp). Fixes mjdejavu and clone mjdejav2 tiles in players hand are not sorted automatically when start the game (ID 00964).
- Maldaliza: Completed protection patches. Game boots with wrong inputs. Missing patches found by Claude Opus 5.
- Marine Date: Promoted game to working
- Missile Command: Fixed regression against 0.289 caused by an M6502 change (which exposed a bug in the driver). Debugged and verified against schematics by GPT-6 Astra.
- Mortal Kombat (Yawdim bootleg, set 4), Pango Fun (Italy), PGM and Poker (Version 50.02 ICB, set 4): Dumped and verified PLDs
- Operation Wolf: Latch TC0060DCA volume writes, fixes Operation Wolf.
- Outfoxies: Fixed overdumped mask ROMs on Outfoxies. Tested with the right EPROM equivalents on real hardware (27c800 for SHAR and 27c400 for SHAS).
- Q*bert and Q*bert's Qubes: Fixed a sign error that can make the SC-01 F2 noise-injection filter unstable for valid internal ROM states (sound\votrax.cpp). Fixes sound cuts off in Q*bert and Q*bert's Qubes after a while and doesn't come back (except for the knocker) (ID 09521).
- P's Attack: Made the game boot. Claude Opus 5 reversed the PIC16C711 fake ready return. Hookup gun triggers. Use an enum for interrupt sources. Implemented light pen registers for P's Attack lightguns (machine\vrender0.cpp).
- Pac-Carnival: Dumped/Verified PLDs
- Paperboy: Fixed factory reset EEPROM for calibrated controls
- Passing Shot: dumped PROMs and PLDs for clone Passing Shot (4 Players) (bootleg).
- PC hardware: Bulk replace machine_configs and inits to ATTR_COLD.
- Psychic Force 2012
  . Fixed intermitant fatalerror in pf2012 and (MESS) p5txla. The PCI core can call remap() before the device gets reset (machine\w83877tf.cpp).
  . Preliminary GUI drawing (aka "ROP") support, including hardware cursor (video\atirage.cpp).
- Push-Over: Fixed scrolling. The game is playable but needs a better layout. GPT-5.6-SOL was used as a research and debugging tool. TODO: Needs a proper layout. Various sections of the screen should be hidden behind an opaque screen overlay (https://youtu.be/rf1VuWgFDJ4).
- Raiden Fighters Jet: Clones rfjetsa and rfjet2kc speedup hack checks were missing, rfjets testmode workaround appears to be obsolete (entering testmode works fine).
- Ring & Ball: Made 'Ring & Ball (Italy, Ver. 2.6)' run. Claude Opus 5.0 identified the unusual split supervisor mode/user mode code encryption method.
- Robot Bowl: Dumped PROMs (line drawing; not used by the emulation)
- Scorpion: Fixed rom loading for clone Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 2) and promoted game to working.
- Sea Wolf II: Fixed French language DIP switch
- Seibu Cup Soccer: COP MCU corrections for Seibu Cup Soccer: 0205 = The sign of the position update comes from bit 0 of the trigger, not from a fixed addition. 130e/3b30 = The length field of the trigger, ((trigger >> 7) & 7) + 1, decides whether the command writes the angle back; bit 7 alone is not enough. Also raise status bit 15 on the integer part of the delta, as the COP works in pixels. 330e = Operates on cop_regs[1], as the uploaded microcode words ($0AA4/$0AA2) select register 1. 338e/3b30/e30e = 338e latches the deltas that the following 3b30 and e30e read back. 6200 = Writes the resulting angle as a byte. d104 = Scales the velocity in place by the 16.16 factor. 5105/5905/f105 = Implemented; the dispatcher only printed a message. z-sort DMA = The list holds data + 1 entries and the sorting key is a signed word (seibu\seibucop.cpp, seibu\seibucop_cmd.ipp and seibu\seibucop_dma.ipp).
- Stop: Added layout, logic and promoted the game to working. Code and debug assisted by Claude Opus 5 Max.
- Super Glob: Connect test switch to enable diagnostics for theglobp and similar epos games (beastfp, beastfpa, theglobp, theglobpa, theglobme, sprglobp, sprglobp2 and sprglbpg).
- Super Pinball Action: Fixed dipswitch port regression
- Super Real Mahjong P.V: Simplified address swizzling code. Fixed gamename, canonically known as "P.V".
- Syvalion: Fixed sprite vertical zoom and low life warning message in Syvalion. Analysis assisted with Cursor Grok 4.6 (taito\taito_h_v.cpp).
- Table Tennis Champions: Fixed endianness issue on blitter ROM access, added side effect checks, cleaned up screen update and read side of address map a bit.
- Tao Taido: Fixed player 2 controls in clone Tao Taido (6 button version). Note: For a long time in clone taotaidoa, player 2's kick buttons (4-6) actually causes player 1 to kick in-game, as if they pressed their own corresponding kick buttons. The game checks player 3 and 4 inputs, which are visible in the service mode's input test program, and reuses them for kick buttons. As noted in the driver notes, players 3 and 4 aren't used at all in the 2-button parent taotaido or the 2/3-button clone taotaido3. Adjusting the 'P4' port to map buttons 1-3, rather than three of the directions, to player 2's buttons 4-6 allows player 2 to kick as expected.
- Terebi Denwa Super Mario World: Fixed most GFX bugs with 'Terebi Denwa Super Mario World'. Maps sprite flipy with an alias. Align sprite vertical positions and tilemap X positions (seibu\sei021x_sei0220_spr.cpp and seibu\seibu_crtc.cpp).
- Tetris (set 1)
  . Update PCB layout. All components correctly identified and checked against a real PCB.
  . Correct ROM labels and added some PLD dumps to clone Tetris (bootleg set 6, with UM3482)
- Tong Zi Maque: Fleshed out the driver. Claude Opus 5 completed the decryption, reversed the EEPROM and RTC hook-up and helped with the GFX emulation.
- Trivia R Us: Don't flip in vblank if the count is zero. Fixes most of the graphics in Trivia R Us dissapears when there's text in Jestbook and Funny Question Game (video\vrender0.cpp) (ID 08891).
- Wink: Emulated protection according to schematics. Reversed by Claude Opus 5. Fixed NVRAM hookup. Fixed DIP routing and added DIP locations. Assume refresh rate being nearer to PAL rather than NTSC clocks out of using a 256x256 display. Promoted Wink (newer) and clones Wink (older) and Wink (older, bugfixed) to working. Use the tilt input type.
- Description changes of Big 10 (1986, System Make, set 1), Blazing Tornado (Export), Booby Kids (CC, Magnet System), Checkmate (set 1), Cross Puzzle (v. 1.00), Cuty Line Limited 2 (V1.60), DecAthlete (JUET 960424 V1.000), DecAthlete (JUET 960709 V1.001), Dyger (Korea, set 1), Dyger (Korea, set 2), El Estivador (Spanish bootleg of Port Man on Galaxian hardware, set 1), Fancy Bowling, Flash Beats (Japan), Fuusen Penta, Grand Striker: Human Cup (Americas), Grand Striker: Human Cup (Europe, Oceania), Grand Striker: Human Cup (Japan), Janyou Part I (Double Bet, set 1), Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Hengsao Qian Jun (V302, Oversea), Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Hengsao Qian Jun (V300, Oversea), Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Hengsao Qian Jun (V301, Oversea), 'Koi Koi Shimasho - Super Real Hanafuda (E63-00001 PCB)', Mad Dog II: The Lost Gold (USA, 3DO hardware), Mahjong Yarunara (Japan, ver. 1.00), Orbatak (USA, prototype), P's Attack (V1.11a), Paradise Deluxe (set 1), 'Print Club 2 Standard Ver1 (U 970921 V1.000)', Loto-Play (MC68705, set 1, with roulette), Loto-Play (MC68705, set 2, with roulette), Loto-Play (MC68705, set 3, with roulette), Loto-Play (PIC16C54, with roulette), Loto-Play programming device (set 1), Loto-Play programming device (set 2), Loto-Play programming device (set 3), Puzzle & Action: Sand-R (J 951114 V1.000), RayStorm (VER 2.60G), Ring King (US, Wood Place), Royal Poker (V1.85, low resolution), Rugby? (Four Roses hardware), Shippuu Mahou Daisakusen (Japan), Solitaire (version 2.5, set 1), Super Mario World - Mario Undoukai (Japan), Super Real Mahjong P.V (Japan), Terebi Denwa Doraemon (Japan), Terebi Denwa Super Mario World (Japan), Terebi Denwa Thomas the Tank Engine and Friends (Japan), Tropical Fruits (Playmark, V. 24-06.00 Rev. 4.0), 'unknown 960606-5 based machine (set 3)', Wink (newer) and Wink (older, bugfixed).
- Fixed rom names in cbasebal.cpp, goldstar.cpp, megasys1.cpp and sbmjb.cpp
- Renamed (akamj) to (akamja), (cobracomjb) to (cobracomjbl), (dynamj) to (cll2), (ichiban) to (ichiban305), (karnova) to (karnov5u), (koikois) to (koikoisa), (mag_boob) to (mag_boobcc), (sandor) to (sandr), (solitaire) to (solitair), (srdarwinb) to (srdarwinjbl), (tabpkr) to (royalpkr185l), (wink) to (winkob) and (winka) to (wink).
- Dipswitch fixes in bfm_cobra3.cpp, cmmb.cpp, crospuzl.cpp, dyna_dc4000.cpp, hshavoc.cpp, midzeus.cpp, pacman.cpp, simple_st0016.cpp, system16.cpp, tomsadvs.cpp and wink.cpp
- MAME
  . VIDEO RENDERING SYSTEM
    . Split the screen_device into multiple devices depending on the actual type. Scripts to do the mass conversions written by Qwen 3.6 (emu\divo.cpp + emu\screen_svg.cpp). Re-Add aspect ratio info (useful for determining driver screen 'resolution') (emu\screen_svg.cpp).
    . Changed the frame_period API to use attotime instead of attoseconds. Fixed the "default sizing" case (emu\screen.cpp). Fixed vpos()/hpos() for the case where a device is still in the previous frame, mirroring a case update_partial() already handled. Debugging assistance by Claude Fable 5.1 (emu\screen.cpp).
    . Fixed a ~20 year old bug (dating to 0.106u2) with vector.cpp: The initial point of the first vector line when a new vector list was processed always started at 0,0 instead of starting at the end point of the last line in the most recently processed vector list (emu\vector.cpp).
    . BGFX
      . Added vector CRT renderer (GitHub #15692). Enable vector CRT rendering by default. Keep -nobgfx_vectorcrt available as an explicit opt-out. Increase bloom targets from one-third to half resolution to prevent the blur kernel from becoming under-resolved at 1080p. Normalize blur offsets against output resolution to preserve the apparent bloom size (bgfx\* and render\bgfx\*).
      . Added 'depixelize' screen chain based on Felix Kreuzer's implementation of Kopf & Lischinski's SIGGRAPH paper (bgfx\effects\depixelize\*)
      . Properly use the new rowbytes on mode changes. This resolves a bunch of driver-dependent issues including blank screens on macOS and crashes with MesaGL on Linux. Debugging assisted by Claude Fable 5.1 (bgfx\chainmanager.cpp and bgfx\texturemanager.cpp).
  . MEMORY SYSTEM: Fixed nullptr access during validation (emu\emumem_mview.cpp and emu\emumem.cpp)
  . DEVICE
    . Got rid of some C string pointers in APIs, allow the linker to coalesce out-of-line instantiations of state_add templates. To follow up, .c_str() calls can be removed from calls to state_add in various CPU devices (emu\distate.cpp).
    . Centrally nstantiate the most common state entry types (emu\distate.cpp)
  . LUA engine
    . Fixed null-pointer crash in emu.wait()/on_machine_postload() when called before the wait-task timer is attached (mame\luaengine.cpp).
    . Allow omitting the condition and action for bpset and wpset. Fixes LUA bpset/wpset functions cause MAME crash (ID 09543) (mame\luaengine_debug.cpp).
    . Created a 'emu.register_before_startup_screens()' function to register a callback invoked prior to startup screens being displayed (mame\luaengine.cpp)
    . Added Lua bindings for audio CD player transport controls (mame\luaengine.cpp)
  . INPUT/OUTPUT
    . Actually added the rules to clean preset/example INI files (makefile)
    . Allow scripts to enumerate device outputs (emu\output.cpp and mame\luaengine.cpp).
    . Make state readable (machine\input_merger.h). Example usage: Reads interrupt state in atlus\cave.cpp and kaneko\sandscrp.cpp. Use input_merger_device::in_r for read IRQ state in isa\sb16.cpp and (MESS) pc98_cbus\sb16_ct2720.cpp.
    . Added missing Tab key mapping (emu\ioport.cpp)
    . Fixed joystick instance tests for SDL3's unsigned ids. SDL_JoystickID is unsigned in SDL3, so the unset instance (-1) is 0xFFFFFFFF and "0 > m_instance" is never true: 3544a4d9 restored that test in set_instance's assert, undoing #14956, so debug builds abort when a controller is connected. reconnect_match has the same comparison, so a controller that is unplugged and plugged back in is never reattached, in any build. Use zero for unset joystick instance ID, fixed assertions. SDL3 uses zero to indicate errors so it can't occur for a real joystick (input\input_sdl3.cpp).
  . UI/OSD
    . Clear transient UI BIOS option without preserving command-line priority. When returning to the internal UI, MAME currently clears OPTION_BIOS by setting it to an empty value at command-line priority. This preserves a high-priority empty BIOS option, preventing per-system INI files from setting the BIOS on the next launch when no BIOS menu is shown. Revert the command-line-priority BIOS option instead. This keeps the original intent of clearing transient UI BIOS selections, while allowing game/system INI BIOS settings to apply again on subsequent launches. Fixes GitHub #11313 and #11314 (frontend\mame\mame.cpp).
    . Better handling of "main menu" mode. Also cleaned up execute bits and stray BOM characters and added makefile rules to srcclean more files (ui\selmenu.cpp and ui\simpleselgame.cpp).
    . Set lowest possible HQ resampler latency to 0.1ms (0 latency broke sound for some games) (ui\audioeffects.cpp). Fixes no sound in all BallySente games, if the Resampler type is set to HQ with the latency of 0.0 ms (ID 09533).
    . Keep the primary monitor at the front of the monitor list (osd\modules\monitor\monitor_common.cpp). Limit popup-disabling -str to 300 instead of 299 like the comment says (ui\ui.cpp).
  . NETWORK
    . Set PCAP_D_IN after open. BSD implementations of pcap (including macOS) echo your own frames back at you, which breaks MacTCP. Suppress it with PCAP_D_IN where available (netdev\pcap.cpp).
    . Fixed inverted success/failure return from send(). pcap_sendpacket() returns 0 on success and PCAP_ERROR on failure, but netdev_pcap::send() was returning the byte count only when the call failed and 0 on success. Removed orphaned dead comment in send() (netdev\pcap.cpp).
  . CHDMAN
    . Added parameter for add/remove pregap in createcd and extractcd (tools\chdman.cpp and util\cdrom.cpp). Changed LZMA compression level to keep the same dictionary size with updated LZMA SDK (util\chdcodec.cpp).
    . Added GDI pregap support (tools\chdman.cpp and util\cdrom.cpp)
    . Use modern C++ standard library facilities (#15889). This updates a few older parts of the CHD code to use standard C++ library features. Changes: Use .data() (C++11) when passing the start of a container. Use std::sort (C++98) instead of qsort. Use std::bit_width (C++20) instead of the custom bits_for_value function. Use std::endian (C++20) instead of manually checking the system's byte order. Checked the std::endian replacements against the old byte-order detection: The old native_endian == 0x100 check corresponds to big-endian and native_endian == 1 corresponds to little-endian. Added or removed includes as needed for these changes. * Use data() instead of &container[0]. Replaces &container[0] with container.data() where a pointer to the start of a standard library container is required. Uses that refer to an offset within a container are left unchanged. This makes the intent clearer and avoids indexing the first element just to obtain the underlying data pointer. No functional change intended. GPT-5.6 Sol (OpenAI) was used to help identify applicable instances and review the changes. Grok 4.5 was used as an additional code review. * Removed unused metadata_hash_compare function declaration. * Refactor sorting and remove unused comparison function. * Replaced qsort with std::sort for metadata hashes. Added operator< to metadata_hash and use std::sort instead of the C qsort + function pointer. Removed the now-unused metadata_hash_compare helper. * Removed cstdlib include from chd.cpp. Removed unnecessary inclusion of cstdlib header, no longer needed after removing qsort. * Make metadata hash comparison local to sort. Moved the metadata_hash comparison from operator< to a local std::sort lambda, keeping the comparison logic at the point where it is used. * Use data() for vector metadata input. Use vector::data() when passing the metadata input buffer, matching the same container access cleanup in chd.cpp. * Replaced bits_for_value with std::bit_width. Use the C++20 std::bit_width function instead of the custom bits_for_value implementation. * Removed static method bits_for_value from chd.h. Removed the now-unused bits_for_value declaration from chd.h after replacing the implementation with std::bit_width. * Fixed formatting of sort function for hasharray (util\chd.cpp). * Use data() for vector buffers. Use data() when passing the start of vector buffers. * Use std::endian for native byte order. Use std::endian instead of manually detecting native byte order (util\chdcodec.cpp). Use data() for vector buffers. Use data() when passing the start of vector buffers (tools\chdman.cpp).
    . Fixed several size and range handling issues: Check the full hunk byte-by-byte when determining whether it is zero-filled. The previous code checked the buffer as uint32_t values, which could leave the final 1-3 bytes unchecked when the hunk size was not divisible by four. Checking bytes also avoids requiring the input buffer to be aligned for uint32_t access. Used GPT 6.3 to help find what to change. Reject zero hunk and unit sizes before calculating the hunk and unit counts. This prevents division by zero when opening a malformed CHD. Reject zero hunk and unit sizes before checking the number of units per hunk. This prevents modulo by zero when creating a CHD with invalid size parameters. Treat zero-length byte reads and writes as no-ops. This avoids unsigned underflow when calculating the last affected hunk from offset + bytes - 1. Keep parent unit references in 64-bit values when compressing V5 maps. Also perform parent unit index calculations in 64-bit arithmetic to avoid truncation or overflow for references beyond the 32-bit range (util\chd.cpp). Retain session data (util\cdrom.cpp, util\chd.cpp and tools\chdman.cpp).
    . Fixed session parsing by extending the read_metadata function to include the absolute meta-index (util\chd.cpp and util\cdrom.cpp)
    . Handle metadata stdout write errors. Check for short writes and flush errors when dumpmeta writes metadata directly to stdout. Also, avoid attempting to remove an output file when dumpmeta is using stdout, allowing write failures to propagate safely through the existing error path. Handle CD extraction read failures. extractcd currently ignores the return values from cdrom_file::read_data() and read_subcode(). If a sector or subcode read fails, extraction can continue and write invalid data to the output files. Check both return values and abort extraction on failure so the existing error cleanup path removes the incomplete output (tools\chdman.cpp).
    . Enforce audio channel limit consistently for AVHuff. AVHuff's decoder configuration provides storage for up to 16 audio channels, but the channel count read from AVHuff data was not checked against this limit before being used to index fixed-size channel arrays. Malformed input specifying more than 16 channels could therefore access these arrays out of bounds. Define the existing 16-channel AVHuff implementation limit in one place and enforce it in the encoder, assembler and decoder before channel-dependent arrays are accessed. chdman also used an eight-channel local array and silently limited AVI input to eight channels. Use the shared AVHuff limit there as well, allowing up to 16 channels and explicitly rejecting inputs or A/V metadata that exceed the supported limit. GPT-5.6 Sol (OpenAI) was used to review the affected code, identify the channel-limit issue, and help prepare the patch. All changes were manually reviewed and applied by me (util\avhuff.cpp and tools\chdman.cpp).
  . 3RDPARTY
    . Updated ASIO to version 1.38.2, Expat 2.8.3, GLM to 1.0.3, LSQLite3 to 0.9.7, Lua to 5.4.8, LZMA to 26.02, PUGIXML to 1.16, SQLite3 to 3.53.4, utf8proc to 2.11.3 and ZSTD to 1.5.7.
    . Revert MAME 0.289 "plugins/keypress: New plugin for recording player behaviour (#15379)". See mamedev/mame-goodies@d1c9005386b6af654e50d3d462d11743575c7418 for a better implementation of the concept.
    . Don't reassign for loop control variables. Control variables in for loops are read-only under Lua 5.5 (plugins\data\data_story.lua und plugins\data\load_dat.lua). Reduced the number of hash lookups during loading (plugins\data\*).
  . UTILs
    . Added a function for converting system clock time points to NTFS timestamps (util\timeconv.cpp). Moved some PKZIP format constants to a header (util\pkzipdefs.h and util\unzip.cpp).
    . Added initial support for creating PKZIP archives (util\archiver.cpp). Added functions that take a reference to a stream rather than a smart pointer that don't take ownership. This makes it clearer than using core_file::open_proxy which doens't extend the lifetime anyway (util\chd.cpp, util\unzip.cpp and util\un7z.cpp). Added some error checks that had been overlooked (util\un7z.cpp and imagedev\diablo.cpp). Got rid of core_file dependency in a lot of places, use I/O interfaces instead. Stage the correct set of changes (util\chd.cpp).
    . Removed text writing functions (util\corefile.cpp and emu\fileio.cpp). Added an output stream buffer for writing text to a write_stream with line ending translation and/or transcoding to UTF-16 (util\ioprocsstream.cpp). Declare UTF-8 encoding in the XML declaration rather than the non-standard practice of prepending an encoded U+FEFF (util\xmlfile.cpp and mame\cheat.cpp). Fixed line ending translation not being applied for certain parts of the HTML output (tools\regrep.cpp).
  . Consolidate drivers into single file (sidearms.cpp and tceptor.cpp)
- MAC OS X: Revised macOS-native OSD. Not the default yet, but users and developers on macOS are encouraged to try it (build with OSD=mac). Supports soft (CoreGraphics), opengl, and bgfx video modes. Controllers are supported via both classic and auto-mapping/MFi providers. -video none does not bring up a visible window in order to facilitate more seamless automated and/or LLM-driven testing, but the menu bar and Dock "quit" methods still work if a -video none MAME gets away from you. Window resizing is kept aspect-ratio compliant when MAME -keepaspect is enabled. Supports multiple windows and multiple monitors, including using an iPad for Sidecar mode. Claude Opus 4.8 and 5 assisted with debugging, planning, and interpreting the more vague parts of Apple's documentation.
- Compiling
  . Updated Android builds to use SDL3. Use SDL_INSTALL_ROOT to get proper pkg-config settings and extract include too (osd/sdl3). Make build use OSD=sdl3 by default and fixed compilation. Updated gradle, sdk and java code to SDL3. Fixed sdk warnings (android). Should use pkg-config as others. Require only EMSDK and update docs (asmjs).
  . Attempted fix for Windows build related to gruesome header name collision (windows\window.cpp)
  . Removed #include "sound.h and "video.h" from emu\emu.h
  . Renamed osd\windows\video.cpp/h to osd\windows\winvideo.cpp/h to resolve header name collision 
  . Replaced eminline bit manipulation functions with C++20's <bit> (formats\aiffile.cpp, formats\ap_dsk35.cpp, util\hashing.cpp and util\msdib.cpp). Retire rot[lr]_32 and rot[lr]_64 inline functions in favor of std::rot[lr] from C++20's <bit> (osd\eminline.h).
  . Cleaned up various things, mostly where .c_str() is unnecessary (isa\isa.cpp, imagedev\harddriv.cpp, sound\disc_inp.hxx, emu\emuopts.cpp, emu\image.cpp and util\timeconv.cpp).
  . Fixed build with ZLIB_CONST defined (util\ioprocsfilter.cpp). Build libformats and libutils with ZLIB_CONST defined.
  . Use read/write stream interfaces rather than core_file where possible (emu\video.cpp).
  . Use util::(big|little)_endian_cast for address swizzling in various places (glass.cpp, irobot_m.cpp, n64_m.cpp, popobear.cpp, raiden2.cpp, tapatune.cpp and tatsumi.cpp)
  . Added support to create a JSON compilation database.
  . Got rid of driver_start and driver_reset. These are leftovers from the pre-device world where driver_start/driver_reset were for drivers\*.* and machine_start/machine/reset were for machine\*.*. Having both of them just makes things confusing, and there was a clear preference for the "machine" variants.
  . Got rid of a log of obsolete .c_str() calls (cpu\* and sound\swp30.cpp). Cleaned up comments marking hacks/workarounds for emulation issues. Also use consistent format for MAME Testers issue references.
- Debugger
  . GDB stub debugger (gdbstub)
    . Proper Z80 architecture support in the gdbstub. Assisted by GLM-5.1. REF: ttps://sourceware.org/git/\?p\=binutils-gdb.git\;a\=blob_plain\;f\=gdb/features/z80.c\;hb\=HEAD (debugger\debuggdbstub.cpp, z80\kc82.h, z80\z80.cpp and z80\z84c015.h).
    . Answer qOffsets so symbol files load unrelocated. GDB asks for the section offsets of the running target when a symbol file is loaded; without an answer it applies its default relocation and symbol addresses stop matching the emulated address space. The CPU address space is not relocated, so reply with all-zero offsets: a symbol file linked at its runtime addresses and loaded with "file"/"add-symbol-file" is used as-is. Assisted by GLM-5.1. Example (Z80, symbol file linked at its runtime addresses): (gdb) file boot.elf, (gdb) target remote 127.0.0.1:12000, 0x00000000 in ?? (), (gdb) break boot_continue and Breakpoint 1 at 0x69 (debugger\debuggdbstub.cpp).
    . gdbstub socket lifecycle fixes: * Opening the listening socket at the first stop threw the fatal error from inside the instruction hook, crashing MAME with a segfault when the port was already taken. The socket is now bound in init_debugger and the fatal error is deferred to a reset notifier, which fires inside running_machine::run's exception handler and exits cleanly. * On detach the connection is closed once the reply has been flushed, so the port is free for another listener. Assisted by GLM-5.1 (debugger\debuggdbstub.cpp).
    . Expose all device state entries to the gdbstub. Generate target.xml dynamically from the live state entries instead of assuming the static per-arch register map matches, and append the visible state entries of all other devices (driver state, attached device registers) as mame.<path> features, one register group per device named after its absolute path (the device tag with ':' mapped to '/'). The g/G/p/P packets are refused until the client has read the description so early probes cannot be misdecoded by regnum. Assisted by GLM-5.1 (debugger\debuggdbstub.cpp).
    . Added a register map for the NEC V20/V30/V33 family. Refresh display after memory writes and monitor commands (debugger\debuggdbstub.cpp).

-




(c) 2026  M.A.S.H